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条)

报告相同问题?

悬赏问题

  • ¥55 AD844 howland电流源如何驱动大额负载
  • ¥15 C++ /QT 内存权限的判断函数列举
  • ¥15 深度学习GFnet理解问题
  • ¥15 单细胞小提琴堆叠图代码
  • ¥50 升级strust2版本到2.3.15.1后使用ognl3.0.6.jar windows环境中没有问题,但部署到linux环境报错
  • ¥15 vue页面,node封装接口
  • ¥15 求TMS320F280039C工程模板!
  • ¥15 delphi+fastreport实现分组补空打印问题
  • ¥15 使用python把两台mysql数据库服务器数据导出和导入
  • ¥15 NodeBB论坛配置Apache Solr中文搜索引擎的详细教程