You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么接口编译后用javap -v查看时default方法修饰符消失了

问题原因解答

  • default 是 Java 源码层面专属的语法修饰符,不属于 JVM 字节码规范定义的方法访问标志,因此编译后的 .class 文件中不会存储单独的 default 标记位。
  • JDK 8 及以上版本的编译、运行环境,是通过三个特征的组合来识别接口默认方法的:
    1. 方法归属于 interface 类型
    2. 方法没有 ACC_ABSTRACT 标志(你提供的反汇编结果里能看到完整的 Code 代码块,说明该方法不是抽象方法)
    3. 方法没有 ACC_STATIC 标志,属于普通实例方法
  • 你使用的 OpenJDK 11 版本的 javap 反汇编工具,没有将上述特征组合反向翻译为 default 修饰符展示,所以最终输出里只能看到 public 修饰符,看不到 default 标识。如果使用 JDK 17 及以上版本的 javap 工具,就能识别出该特征并输出 default 修饰符。

内容的提问来源于stack exchange,提问作者Giorgi Tsiklauri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 05:24:02