闫馨月
目录
This关键字
this.属性名
this( )访问构造方法
封装
思想封装
代码层次的封装
构建对象的方法
什么时候用构造器赋值?
什么是getter & setter
总结
This关键字
this 关键字是JAVA常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。
this.属性名
this调用构造器的要求:
1、必须在构造器中使用this调用构造器
2、必须是第一句话(第一行代码)
this代表的是当前类的对象,this代表的是当前方法的调用者。
this既然是代表方法的调用者,它实际上和对象的作用是一样的, 既可以调属性,也可以调方法
一个类中可以有什么:属性,方法,构造器
this不能用在static方法中。为什么?
首先,static叫静态方法,也叫类方法,它先于任何的对象出现。在程序最开始启动的时候,就会为static方法分配一块内存空间,成为静态区,属于这个类。而不是static方法,必须在类实例化的时候,才会给分配内存空间,在实例化对象的时候JVM在堆区分配一个具体的对象,this指针指向这个对象。也就是说,this指针是指向堆区中的类的对象,而static域不属于this指向的范围所在,所以不能调用。
开发中,this通常用在什么位置:通常用在赋值,构造器赋值。
普通方法访问其他方法、成员变量时不使用 this 前缀,但如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须使用 this 前缀。
比如,有一个学生类Student的定义:
public class Student {
private String name; // 学生姓名
private double score; // 成绩
private int age; // 年龄
}
name、score 和age 的作用域是private,因此在类外部无法对它们的值进行设置。因此可以为Student类添加一个构造方法,然后在构造方法中传递参数进行修改。
// 创建构造方法,为上面的3个属性赋初始值
public Student(String name,double score,int age) {
this.name = name; // 设置学生姓名
this.score = score; // 设置学生成绩
this.age = age; // 设置学生年龄
}
在 Student类的构造方法中使用了this关键字对属性name、score和age赋值,this表示当前对象。this.name=name语句表示一个赋值语句,等号左边的this.name是指当前对象具有的变量name,等号右边的name表示参数传递过来的数值。
接下来,创建一个 main()方法对Teacher类进行测试。
public static void main(String[] args) {
Student student = new Student("西门",100.0,16);
System.out.println("学生信息如下:");
System.out.println("学生姓名:"+student.name+"n学生成绩:"+student.score+"n学生年龄:"+student.age);
}
输出结果:
注意:当一个类的属性(成员变量)名与访问该属性的方法参数名相同时,则需要使用 this 关键字来访问类中的属性,以区分类的属性和方法中的参数。
this( )访问构造方法
this( )用来访问本类的构造方法,括号中可以有参数,如果有参数就是调用指定的有参构造方法。
构造方法是类的一种特殊方法,没有返回值,方法名称和类名相同。
定义一个学生类Student,使用this()调用构造函数给name赋值。
本案例参考:http://c.biancheng.net/view/953.html
public class Student {
String name;
// 无参构造方法(没有参数的构造方法)
public Student() {
this("张三");
}
// 有参构造方法
public Student(String name) {
this.name = name;
}
// 输出name和age
public void print() {
System.out.println("姓名:" + name);
}
public static void main(String[] args) {
Student stu = new Student();
stu.print();
}
}
封装
将类的某些信息隐藏在类的内部,不允许外部程序直接访问,通过该类提供的方法来实现对隐藏信息的操作和访问,简单的说就是隐藏对象的信息,留出访问的接口。
思想封装
把一堆重复执行的代码封装成方法,把一堆重复执行的方法封装成一个类。
代码层次的封装
所有的属性私有化。private,每个属性提供对应的
特点:
1.只能通过规定的方法访问数据
2.隐藏类的实例细节,方便修改和实现。
构建对象的方法
和数组相似,对象也是引用数据类型,只能使用new运算符从堆中分配内存;
创建对象的一般语法:类名 引用名 = new 类名();
使用已经定义好的类,创建该类对象的过程称为“实例化”。
同样的,只有先实例化类的对象,才可以访问到类中的成员(属性和方法);
使用成员运算符(.)来访问成员属性或成员方法
一般语法是:对象名.成员名
如:std.age = 18; //为成员属性赋值
std.dining(); //调用成员方法
什么时候用构造器赋值?
看创建对象是为了干什么?如果说创建对象仅仅是为了调用这个类的方法,建议使用无参构造器 如果说创建对象的时候需要使用到对象的某个属性,可以使用构造器赋值。
什么是getter & setter
getter 是一种获得属性值的方法,setter是一种设置属性值的方法
getter负责查询值,它不带任何参数,setter则负责设置键值,值是以参数的形式传递,在他的函数体中,一切的return都是无效的。
例:编写一个包含名为Calculator类的程序。定义两个整型属性以及对该两个变量的setter和getter,编写用于对两个属性执行加、减、乘、除运算方法。在main方法里创建该类的对象并访问这些方法。
package night;
public class Calculator {
private int a;//定义属性
private int b;
int c;
public void setA(int a){ //构造方法
this.a=a;
}
public int getA(){
return a; //返回到private int a;
}
public void setB(int b){
this.b=b;
}
public int getB() {
return b;
}
public void augment(){ //方法
c=a+b;
System.out.println(c);
}
public void reduce(){
c=a-b;
System.out.println(c);
}
public void ride(){
c=a*b;
System.out.println(c);
}
public void divide(){
c=a/b;
System.out.println(c);
}
}
package night;
public class Vasssal {
public static void main(String[] args){
Calculator calculator=new Calculator(); //开辟新的class空间
calculator.setA(24);
calculator.setB(45);
System.out.println("请输出a+b:");
calculator.augment(); //调用calculator类中的方法
System.out.println("请输出a-b:");
calculator.reduce();
System.out.println("请输出a*b");
calculator.ride();
System.out.println("请输入a/b");
calculator.divide();
}
}
输出:
总结
今天学了This关键字、this()构造方法、封装、getter方法和setter方法...This掌握的相对来说是OK的,也记住了this不能用在static方法中,以及构造方法的首字母必须大写等等,getter和setter还是没有弄明白,需要请求支援啦!!!!



