【发布时间】:2018-02-26 12:59:51
【问题描述】:
我正在为 Java 认证测试做准备,我发现了一个与 Java 静态块的执行相关的有趣问题。我花了很多时间阅读有关此主题的内容,但没有找到我想要的答案。
我知道当类加载到JVM或调用main方法时会执行静态块,但是...
package oneClassTasks;
class Parent {
static int age;
}
class Child extends Parent {
static {
age = 5;
System.out.println("child's static block");
}
}
public class XXX {
public static void main(String args[]) {
System.out.println("Child age is : "+ Child.age);
}
}
输出是:
Child age is : 0
如果我在-verbose:class 中包含详细输出,则输出为:
...
[Loaded java.security.BasicPermissionCollection from C:\Program Files\Java\jre1.8.0_161\lib\rt.jar]
[Loaded oneClassTasks.XXX from file:/D:/temp/bin/]
[Loaded sun.launcher.LauncherHelper$FXHelper from C:\Program Files\Java\jre1.8.0_161\lib\rt.jar]
[Loaded java.lang.Class$MethodArray from C:\Program Files\Java\jre1.8.0_161\lib\rt.jar]
[Loaded java.lang.Void from C:\Program Files\Java\jre1.8.0_161\lib\rt.jar]
[Loaded oneClassTasks.Parent from file:/D:/temp/bin/]
[Loaded oneClassTasks.Child from file:/D:/temp/bin/]
Child age is : 0
[Loaded java.lang.Shutdown from C:\Program Files\Java\jre1.8.0_161\lib\rt.jar]
[Loaded java.lang.Shutdown$Lock from C:\Program Files\Java\jre1.8.0_161\lib\rt.jar]
我们可以在这里看到 子类被加载到 JVM 中。
谁能解释一下为什么Child类的静态块没有被执行?
【问题讨论】: