Java虚拟机
1 package exercise; 2 3 public class SSClass { 4 5 static { 6 System.out.println("SSClass"); 7 } 8 9 }
1 package exercise; 2 3 public class SuperClass extends SSClass { 4 5 static { 6 System.out.println("SupperClass init!"); 7 } 8 9 public static int value = 123; 10 11 public SuperClass() { 12 System.out.println("init SuperClass"); 13 } 14 15 }
1 package exercise; 2 3 public class SubClass extends SuperClass { 4 5 static { 6 System.out.println("SubClass init!"); 7 } 8 9 static int a; 10 11 public SubClass() { 12 System.out.println("init SubClass"); 13 } 14 15 }
1 package exercise; 2 3 public class NotInitialization { 4 5 public static void main(String[] args) { 6 7 System.out.println(SubClass.value); 8 9 } 10 11 }
执行上述代码,运行结果如下:
为什么没有输出SubClass init?
解释一下:对于静态字段,只有直接定义这个字段的类才会被初始化,因此通过其子类来引用父类中定义的静态字段,只会触发父类的初始化而不会触发子类的初始化。