Ton*_*y R 107 java static initialization
何时初始化静态字段?如果我从不实例化一个类,但是我访问一个静态字段,是否所有静态块和私有静态方法用于实例化那个时刻调用的私有静态字段(按顺序)?
如果我调用静态方法怎么办?它是否也运行所有静态块?方法之前?
Ste*_*n C 150
类的静态初始化通常在第一次发生以下事件之一之前发生:
也可以通过使用Class.forName(fqn, true, classLoader)或缩写来强制类初始化(如果尚未初始化)Class.forName(fqn)
1 - 最后一个要点出现在JLS for Java 6到Java 8中,但在规范中显然是一个错误.它最终在Java 9 JLS中得到了纠正:请参阅source.
nai*_*kus 13
静态字段在类加载(加载,链接和初始化)的初始化 "阶段" 期间初始化,包括静态初始化器和其静态字段的初始化.静态初始值设定项按类中定义的文本顺序执行.
考虑这个例子:
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"
}
}
Run Code Online (Sandbox Code Playgroud)
Test.b打印,null因为sayHello在静态范围内调用时,静态变量a未初始化.
| 归档时间: |
|
| 查看次数: |
71447 次 |
| 最近记录: |