大部分人将关键字 this 的用法总结为三种,或者四种,在我看来其实就两种:
一、在构造器方法中调用本类的其他构造器方法
这算是一个固定用法,用法是this(参数列表)
,这一句必须处于构造方法的第一句,同时一个构造方法内部只能调用另一个构造函数 。
(另外,
1.除构造器外,编译器禁止在其他地方调用构造器;
2.在一个构造函数内只能调用一个构造函数;)
示例:
class A{
public A(int b){
//doSomething
}
public A(String s){
this(1);//调用参数为int型的构造器
//...
}
}
二、在方法内使用,表示“调用此方法的那个对象”
可分为几种常见的情况:
1. 用 this 来访问类的实例中的属性和方法
示例:
class B{
private string name;
public void setName(String s){
this.name = s;
//其实这里等同于B.this.name,可以与2.对比看
}
public void f(String s){
this.setName(s);
System.out.print(this);//打印当前对象的字符串表示
}
}
2.匿名类和内部类中,调用外部类的成员变量或方法
在匿名类或者内部类中用this时,这个this指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。 这里有个技巧:函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。
示例:
public class C{
int i = 1;
private void f(){}
public C(){
Thread thread = new Thread(){
int a ;
@Override
public void run() {
C.this.f();//this指代C类对象
a = C.this.i;//等同于this.a = C.this.i,
//前this指的是thread,后this指的是C的实例对象
super.run();
}
};
}
}
相关:What is the difference between Class.this and this in Java