Java虚拟机

Java类加载机制解析
本文通过一个简单的Java程序示例,详细解释了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值