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?
解释一下:对于静态字段,只有直接定义这个字段的类才会被初始化,因此通过其子类来引用父类中定义的静态字段,只会触发父类的初始化而不会触发子类的初始化。