我正准备自己进行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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Child age is : 0
Run Code Online (Sandbox Code Playgroud)
如果我包含详细输出-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 …Run Code Online (Sandbox Code Playgroud)