java进行方法调用时,它如何知道是被谁调用的呢?为此编译器做了一些幕后的工作,它暗自把“所操作对象的引用”作为第一个参数传递给了方法。假设你希望在方法的内部获得当前对象的引用,由于这个引用是由编译器偷偷加上去的,所以没有任何标识符可用。但是为此java有一个专门的关键字this。
this只能在方法的内部使用,表示对“调用方法的那个对象的引用”。this的用法和其他对象引用并无不同,但要注意,如果在方法内部调用同一个类的其他方法,就不必使用this,直接调用即可(当然也可以手动添加,但是没有必要,编译器会自动添加)。只有当需要明确指出对当前对象的引用时,才需要使用this关键字。
public class Leaf {
int i = 0;
Leaf increment(){
i++;
return this; //返回当前对象的引用
}
void print(){
System.out.println("i =" + i);
}
public static void main(String[] args){
Leaf x = new Leaf();
x.increment().increment().increment().print(); //输出结果为i = 3
}
}
this的另一种用法是在构造器中调用其他构造器。
可能为一个类写了多个构造器,有时想在构造器中调用另一个构造器,以避免代码重复,可用this关键字做到这一点。
public class Test{
int i = 0;
String s = "init value";
//构造器1
Test(int i){
this.i = i;
}
//构造器2
Test(String s){
this.s = s;
}
//构造器3
Test(int i, String s){
this(i); //在构造器3中调用构造器1
//this(s); 这一行代码会编译报错,是因为尽管可以用this调用另一个构造器,但是不能调用多个,而且必须将构造器调用置于最起始处。
}
}
这个例子也展示了this的另一种用法,由于参数s的名称和类成员变量s的名称相同,可能会产生歧义,使用this.s来代表成员变量就能解决这个问题,在java代码中经常会出现这种写法。
注意:除了构造器以外,编译器禁止在其他任何方法中调用构造器。
本文深入探讨了Java中this关键字的用途,包括在方法内部获取当前对象的引用,以及在构造器中调用其他构造器,避免代码重复。通过具体示例,解释了this如何帮助解决方法调用和构造器调用中的常见问题。
6万+

被折叠的 条评论
为什么被折叠?



