public class ThisTest2 {
public static void main(String[] args) {
// 测试this表示当前对象的引用
SelfObject aaa = new SelfObject();
aaa.test();
}
}
/**
* 一、使用this引用成员变量
* 在一个类的方法或构造方法内部,可以使用"this.成员变量名"来引用成员变量
* 有时可以省略,有时不能省略
*/
class MemberVariable {
private int a;
public MemberVariable(int a) {
this.a = a;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
}
注解:
在该段代码的 构造方法 和 setA方法 的内部,都是用this.a引用类的成员变量a
因为无论在 构造方法 还是 setA方法 内部,都包含2个变量名为a的变量,一个是参数a,另外一个是成员变量a。
按照Java语言的变量作用域,参数a的作用范围在构造方法或方法的内部,成员变量a的作用范围是整个类的内部
这样在构造方法和setA方法内部就存在了变量a的冲突
Java语言规定当变量作用范围重叠时,作用域小的变量覆盖作用域大的变量.所以在构造方法和setA方法内部,参数a起作用
这样需要访问成员变量a则必须使用this进行引用.当然,如果变量名不发生重叠,则this可以省略
但是为了增强代码的可读性,一般将参数的名称和成员变量的名称保持一致,所以this的使用频率在规范的代码内部应该很多
/**
* 二、使用this关键字引用构造方法
*/
class Constructor {
int a ;
public Constructor() {
this(0);
}
public Constructor(int a) {
this.a = a;
}
}
注解:
在无参构造方法内部,使用this调用了另一个有参构造方法,其中0是根据需要传递的参数的值
当一个类内部的构造方法比较多时,可以只书写一个构造方法的内部功能代码
然后其他的构造方法都通过调用该构造方法来实现
这样既保证了所有的构造方法是统一的,也降低了代码的重复
注意: 在构造方法内部使用this关键字调用其他构造方法时,必须写在第一行,只能调用一个且仅一次构造方法
/**
* 三、使用this代表自身对象(默认)
*/
class SelfObject {
// SelfObject object;
public SelfObject() {
//object = this;
}
public void test() {
System.out.println(this);
}
}
注解:
创建一个引用对象object 在构造方法内部,将对象this的值赋给object
在test方法内部,输出对象this的内容,这里的this都代表自身类型的对象
/**
* 四、引用成员方法
* 在一个类的内部,成员方法之间的互相调用时也可以使用“this.方法名(参数)”来进行引用
* 只是所有这样的引用中this都可以省略,可有可无
*/
结论:
1.表示引用类的成员变量 而非函数
注意: 函数参数和成员变量同名进行区分
2.在构造方法中引用其他构造器(也就是构造方法)
注意: 只能引用一个构造方法,且在第一行
3.表示对当前对象的引用 this关键字代表自身类的对象
4.引用成员方法
注意: this不能用在static方法中