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

