结合代码理解Class文件中的Flags

本文重点在后面两张图。

JVM类标志:

Flag Name Value Interpretation
ACC_PUBLIC 0x0001 公有类
ACC_FINAL 0x0010 Final标识,不可是超类
ACC_SUPER 0x0020 在被调用的特殊指令调用时,特别处理超类方法
ACC_INTERFACE 0x0200 接口类
ACC_ABSTRACT 0x0400 抽象类,如果类被ACC_INTERFACE标志,它也会被标志为ACC_ABSTRACT
ACC_SYNTHETIC 0x1000 由编译器生成的,并没有出现在源代码中
ACC_ANNOTATION 0x2000 注释类型
ACC_ENUM 0x4000 类或者它的超类被声明为枚举类型

JVM方法标志:

Flag Name Value Interpretation
ACC_PUBLIC 0x0001 公有方法
ACC_PRIVATE 0x0002 私有方法
ACC_PROTECTED 0x0004 保护方法
ACC_STATIC 0x0008 静态方法
ACC_FINAL 0x0010 Final方法,不能 override
ACC_SYNCHRONIZED 0x0020 同步方法
ACC_BRIDGE 0x0040 由编译器生成的桥接方法
ACC_VARARGS 0x0080 使用可变数量的参数声明
ACC_NATIVE 0x0100 声明本地人,用 Java 以外的语言实现
ACC_ABSTRACT 0x0400 抽象标志,无实现
ACC_STRICT 0x0800 严格的浮点运算规则
ACC_SYNTHETIC 0x1000 由编译器生成的,并没有出现在源代码中

方法标志中较特殊的是BRIDGE和SYNTHETIC。可通过下面的代码理解。

image-20230318131113082

面严格的浮点运算规则:

image-20230318131920605

结合代码理解Class文件中的Flags
https://blog.isnap.cn/posts/3c858c0b/
作者
三岁于辛
发布于
2023年3月17日
许可协议