public class Test1 {
{
a = 1;
System.out.println(a); // 错误
}
private int a = 2;
public static void main(String[] args) {
Test1 test1 = new Test1();
System.out.println(test1.a);
}
}
上面的代码会报出一个错误, Cannot reference a field before it is defined
This is defined in the JLS 8.3.2.3. In particular:
The declaration of a member needs to appear textually before it is used [...] if the usage occurs in a [...] static initializer of C.
When you call cheat()
you go around that rule. This is actually the 5th example in the list of the examples of that section.
Note that cheat()
will return false in the static initializer block because test
has not been initialised yet.