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?

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

原文地址:https://www.cnblogs.com/hanw1991/p/7791840.html