何时初始化静态字段?如果我从未实例化过一个类,但我访问了一个静态字段,那么用于实例化私有静态字段的所有静态块和私有静态方法是否都在此时被调用(按顺序)?
如果我调用静态方法呢?它也运行所有的静态块吗?在这个方法之前?
发布于 2010-08-17 04:23:08
静态字段在类加载(加载、链接和初始化)的初始化“阶段”期间初始化,其中包括静态初始化程序及其静态字段初始化。静态初始化器按照类中定义的文本顺序执行。
考虑一下这个例子:
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"
}
}B打印null,因为在静态作用域中调用sayHello时,没有初始化静态变量a。
发布于 2010-08-17 03:58:51
是的,所有静态初始化程序都在第一次访问类之前运行。如果有别的办法的话,我会叫它窃听器。
https://stackoverflow.com/questions/3499214
复制相似问题