无法编译(有illegal forward reference错误),正如人们所期望的那样:
class test {
int x = x + 42;
}
Run Code Online (Sandbox Code Playgroud)
但这有效:
class test {
int x = this.x + 42;
}
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?在后一种情况下分配了什么?
试图编译这段代码
public class Main {
public static void main(String args[]) {
new Main();
}
{ System.out.println(x); } //Error here
int x=1;
}
Run Code Online (Sandbox Code Playgroud)
产生cannot reference a field before it is defined错误.但是如果我将初始化器行更改为
{ System.out.println(this.x); }
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力,打印默认的int值0.
这对我来说有点混乱,为什么会this有所不同呢?在这种情况下,它不应该是多余的吗?任何人都可以解释我幕后发生的事情,以明确它是如何工作的吗?
PS:我知道通过x在初始化程序之前声明它也可以使它工作.