“this”关键字:Java中的工作机制
在学习了Java一段时间之后,这是第一次使用关键字让我如此困惑。this
这是我感到困惑的原因。我写了下面的代码:
class BasicInheritanceTest3Base{
private int x = 0;
public int y;
public void a() {
x++;
this.x++;
System.out.println("BasicInheritanceTest3Base.a()");
b();
this.b();
System.out.println(x);
System.out.println(y);
}
public void b(){
System.out.println("BasicInheritanceTest3Base.b()");
}
}
public class BasicInheritanceTest3 extends BasicInheritanceTest3Base {
private int x = 3;
public int y = 2;
public void b() {
System.out.println("BasicInheritanceTest3.b()");
}
public static void main(String[] args){
BasicInheritanceTest3 bit2 = new BasicInheritanceTest3();
bit2.a();
}
}
我得到了以下输出:
BasicInheritanceTest3Base.a()
BasicInheritanceTest3.b()
BasicInheritanceTest3.b()
2
0
现在这里的第一个问题是:为什么并指向基类而不是子类?如果指向基类的,为什么叫子类呢?对于字段和方法,此行为是否不同?x
this.x
x
this.x
x
this.b()
b()
但是,主要关注的是关键字的机制。我的意思是,你知道,指向(指)当前对象。如果你仔细想想,这不是一个神奇的行为。在某个地方必须有田野。例如,类的文字不可见,但存在于发出的字节码中。同样,此引用应存在于字节码中。this
this
this
.class
好吧,假设上面是正确的,应该是一个(空白的 final),每次构造对象及其字段时都会实例化它。这意味着它是一个实例变量,而不是一个静态变量。this
public final
现在,如果将其实例化为当前对象的引用(仅是特定对象),那么对于字段和方法,为什么上面的使用是不同的?那么总而言之,背后的机制是什么?该机制是否也适用于关键字?this
this
super
编辑:每个人都在阅读问题,然后是评论,我想问一下,编译器声明的字段在哪里,它的限定符是什么。由此产生的行为如何在幕后发生?this