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?

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

 

版权声明:本文为hanw1991原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hanw1991/p/7791840.html