FixedStarHaHa 2020-03-04 17:28 采纳率: 50%
浏览 317
已采纳

java接口初始化为什么生成clinit方法

在《深入理解java虚拟机》类初始化中有如下描述:
接口中不能使用静态语句块,但仍然有变量初始化的赋值操作,因此接口与类一样都会 生成<clinit>()方法。但接口与类不同的是,执行接口的<clinit>()方法不需要先执行 父接口的<clinit>()方法。只有当父接口中定义的变量使用时,父接口才会初始化。另外,接口的实现类在初始化时也一样不会执行接口的<clinit>()方法。

为什么我在如下实现时,并没有生成< clinit>??


public interface Util {
   int f=5;


}

javap -v Util.class
图片说明

接口中没有静态代码块,有变量,但是变量的修饰符是static final 已经在连接时指向ConstantValue,所以不会生成< clinit>
各位大佬,书上写的接口生成< clinit>是什么情况?

  • 写回答

3条回答 默认 最新

  • 封印di恶魔 2020-03-04 17:46
    关注

    书上不是说变量的初始化,但是你用static final修饰,那么他就是常量了,不是变量
    另外深究这些没用的东西干嘛,这个功能不能为你写新的功能提供任何帮助
    喜欢研究底层的话,可以重点看逆向

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 蓝牙耳机怎么查看日志
  • ¥15 R语言 拟时序分析降维图如何减少分支
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统