public class Test {
static String sayHello() {
return a;
}
static String b = sayHello(); // a static method is called to assign value to b.
// but its a has not been initialized yet.
static String a = "hello";
static String c = sayHello(); // assignes "hello" to variable c
public static void main(String[] arg) throws Throwable {
System.out.println(Test.b); // prints null
System.out.println(Test.sayHello()); // prints "hello"
}
}
If I never instantiate a class, but I access a static field, are ALL the static blocks and private static methods used to instantiate private static fields called (in order) at that instant?
是的。(没有什么是真正瞬间的。)
如果我调用一个静态方法会怎样? 它是否也运行所有的静态块? 在方法之前?
是的,是的。
请注意,可以构造可以观察静态字段的 default initialized值的代码。
1-最后一个要点出现在 JLS for Java6到 Java8中,但是它显然是规范中的一个错误。它最终在 Java9JLS 中得到了更正: 请参见 来源。