this关键词在java使用地比较频繁,对于大多数初学者而言,this让人很烦恼,但它却又非常重要。
现在先说下this关键词的应用。this关键词主要有三个应用,1.引用成员变量,2.调用构造器(构造方法),3.返回当前对象的引用。
一、引用成员变量
引用成员变量这一用法,在构造函数中可以经常看到。如下面一个例子:
String test1 = "1";
String test2 = "2";
Test1(String test1,String test2){
System.out.println("赋值之前:"+this.test1);
System.out.println("赋值之前:"+this.test2);
this.test1 = test1;
this.test2 = test2;
System.out.println("赋值之后:"+this.test1);
System.out.println("赋值之后:"+this.test2);
}
public static void main(String[] args) {
Test1 t = new Test1("a","b");
}
输出的结果:
可以看到,this.test1指向的是类的成员变量,而不是构造方法中的形式参数。在实际应用中,例子中的两个成员变量在定义时是没有赋值的,而是通过构造函数初始化成员变量。而使用this关键词也可以将成员变量与形式参数很好的区分开来 。
二、调用构造方法
调用构造方法,一般是指在同一个类中一个构造方法调用其他构造方法。一个类可以有多个构造方法,有时因为功能需要,就需要构造方法之间的相互调用。这个可以用this来实现。
看如下例子:
Test1(){
this("e");
}
Test1(String a,int b){
System.out.println(a+" "+b);
}
Test1(String a){
this("abc",123);
}
public static void main(String[] args) {
Test1 t = new Test1();
}
输出的结果是: abc
123 。
当new一个Test1的时候,就会执行其无参构造方法,在这个无参构造方法中,调用了this("e"),这样,编译器会直接找到符合只有一个形式参数且类型相同的构造方法,继而再次调用this("abc",123),同理,找到符合条件的构造方法后,就输出最终结果。当然,构造方法中的参数类型也必须一致。
需要注意的是,只能在构造方法中使用this调用其他构造方法,其他任何方法都不可以调用。另外,同一个构造方法中只能用一个this,并且对其他构造方法的调用的代码必须写在代码块的第一行,比如,在this("e")的前面再添加一行,就会报错。
三、返回当前对象的引用
这个是最常用的,而且我个人觉得,前面两个都是基于这点而使用的。比如第一个应用,引用成员变量。当new一个对象时,完全可以用对象的引用来代替this来调用成员变量。
先看下面一个例子:
String test;
public Test1 demo(String test){
this.test = test;
System.out.println(test);
return this;
}
public static void main(String[] args) {
Test1 t = new Test1();
t.demo("456").demo("789");
}
另一个例子,就是重写equals()方法的实现中也有用到this。
public boolean equals(Object obj){
……省略……
if(this==obj)
return true;
……省略……
}
这个this所指的也就是当前对象的引用。
另外其实在内部类中也会有用到this的这个功能。
其实,this不仅可以引用成员变量,同时也可以引用成员方法。但是一般不会在一个方法中写this.xxx()。因为,这个this编译器会自动添加上去。另外,之所以不使用this来引用成员变量是出于对于代码观赏性,因为并不是所有人都喜欢到处用this,如果随意写this的话,可能还会引起其他人的迷惑。
最后,希望写的这点东西对大家有帮助。