我认为。您不调用任何
Derived属性(
myVar属于
base,不属于
Derived)。而且Java没有从运行静态块
Derived。如果向其中添加一些静态字段
Derived并对其进行访问,则Java将执行所有静态块。
class base { static public int myVar;}class Derived extends base { static public int myVar2; static { base.myVar = 10; }}public class Main { public static void main( String[] args ) throws Exception { System.out.println(Derived.myVar2); System.out.println(base.myVar); }}根据Java规范,当类初始化时(并执行了静态块):
12.4.1何时发生初始化在以下任何一种首次出现之前,将立即初始化类或接口类型T:
•T是一个类,并创建T的实例。
•T是一个类,并调用T声明的静态方法。
•分配了由T声明的静态字段。
•使用T声明的静态字段,并且该字段不是常量变量(第4.12.4节)。
•T是顶级类(第7.6节),并执行词法嵌套在T中的断言语句(第14.10节)(第8.1.3节)。



