什么时候发生静态类初始化?何时初始化静态字段?如果我从未实例化过一个类,但我访问了一个静态字段,那么用于实例化私有静态字段的所有静态块和私有静态方法是否都在此时被调用(按顺序)?如果我调用静态方法呢?它也运行所有的静态块吗?在方法之前?
3 回答
阿波罗的战车
TA贡献1862条经验 获得超6个赞
类的静态初始化通常在第一次发生下列事件之前立即发生:
- 创建类的实例,
- 调用类的静态方法,
- 类的静态字段被分配,
- 使用非恒定的静态字段,或
对于顶级类,将执行在类中以词汇方式嵌套的断言语句。1.
开满天机
TA贡献1786条经验 获得超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" }}
b打印null
因为当sayHello
在静态作用域中调用的静态变量。a
没有初始化。
添加回答
举报
0/150
提交
取消