this关键字
this关键字的基本概念
若在构造方法中出现了this关键字,则代表当前正在构造的对象。
若在成员方法中出现了this关键字,则代表当前正在调用的对象。
总结:
在构造方法中this代表着当前正在构造的对象,在成员方法中调用的是当前正在调用的对象,无论是准备阶段在构造的对象
还是调用阶段正在使用它的对象都是本类的对象,有上述案例可以看出,t1与t2打印出来的对象是不相同的,由此可证实上述说法
得准确性
工作原理
在构造方法中和成员方法中访问成员变量时,编译器会加上this.的前缀,而this.相当于汉语中我的,当不同的对象调用同一个方法
时,由于调用方法的对象不同导致this关键字不同,从而this.方式访问的结果也就随之不同。
以下是我记录的几个案例,方便理解this关键字的使用方式:
案例1:
为什么显示出来的是默认值null和0?是因为程序在运行的过程遵循就近原则,在类中出现相同的名字时程序第一时间
找到最近的name,也就是局部变量name而不是成员变量name;解决的办法在name前面加上this.即可;
ThisTest(String name, int age){
this.name = name;
this.age = age;
}
案例2
void grow(){
age++;
}
void grow(int age){
this.age +=age;
}
在案例2中,两个grow方法有何不同?在于他们使用成员变量age时有没有发生歧义?没有发生歧义所以不需要使用
this关键字,发生歧义所以使用this关键字,因为在方法体中出现两个age令程序难以分辨他们分别处于什么角色?
案例3,this关键字作为方法的返回值
案例3中自定义成员方法getThisTest使用ThisTest作为返回值类型,为什么可以使用本类作为返回值类型?因为字符串的返回值类型是String,
如果理解不了就说服自己,说服不了就让别人说服你。。。
ThisTest作为返回值类型在其作用是最后接收返回的值ThisTest本身,所以return this表示返回正在调用类的自身(就是t3引用的实例化的类的自身),
这时候t3调用ThisTest方法,将返回值赋值给t4,这样t4和t3指向了同一个地址;
案例4:调用其他构造方法(该方法使用的比较少,了解即可)
this关键字的使用方式:
1、形参变量名与成员变量名同名,提高代码的可读性(开发的时候推荐使用该方法);
2、没有产生歧义的成员变量不需要使用this关键字;
3、当局部变量名与成员变量名相同时,在方法体中会优先使用局部变量(就近原则),若希望使用成员变量,则需要在
成员变量的前面加上this.的前缀,明确要求该变量是成员变量(重中之重)。
3、this关键字除了可以通过this.的方式调用成员变量和成员方法外,还可以作为方法的返回值(重点)。
4、在构造方法的第一行可以使用this()的方式来调用本类中的其他构造方法(了解)