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

报告相同问题?

悬赏问题

  • ¥15 图像超分real-esrgan网络自己训练模型遇到问题
  • ¥15 如何构建全国统一的物流管理平台?
  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥30 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路
  • ¥15 内网办公电脑进行向日葵