接口的初始化规则

本文探讨了在JVM类加载过程中接口的初始化规则。与类不同,接口的初始化并不会先于其实现的父接口。只有在实际使用接口中的常量时,父接口才会被初始化。同时,接口的静态成员变量的初始化与类加载阶段的赋默认值和初始化阶段的赋正确值有关,展示了JVM类加载的逻辑和合理性。
摘要由CSDN通过智能技术生成

在JVM类加载这篇文章中,已经确定一个类在初始化时必须先行初始化其父类(如果有),我们接着来看接口的初始化,我们明白接口中的成员属性都是public static final修饰的,例子中省略不写!!!
在这里插入图片描述
结论:父接口的实例化块的内容并未输出,证明在初始化一个类时,并不会先初始化它所实现的接口,我们接着往下看!
在这里插入图片描述
结论:仅仅只输出子接口的实例化块的内容说明了在初始化一个接口时,并不会先初始化它的父接口,下面输出的是线程重写的toString方法不影响得出的结论!
在这里插入图片描述
注意:只有在真正使用到父接口的时候(如引用接口中所定义的常量时),才会初始化,这点与类不同;另外与类一样,被final修饰的静态成员变量初始化所被赋予的值不确定时(运行期确定)不会被放置在常量池当中,所以需要类运行时存在

再来看一个例子加深类加载器准备阶段(

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值