对于某些Java字节代码解析器项目,我阅读了JVM规范,并发现Java虚拟机类文件格式访问修饰符字段的位掩码值是
ACC_PUBLIC = 0x0001
ACC_FINAL = 0x0010
ACC_SUPER = 0x0020 # old invokespecial instruction semantics (Java 1.0x?)
ACC_INTERFACE = 0x0200
ACC_ABSTRACT = 0x0400
ACC_SYNTHETIC = 0x1000
ACC_ANNOTATION = 0x2000
ACC_ENUM = 0x4000
Run Code Online (Sandbox Code Playgroud)
不知怎的,我不知道0x1000是为了什么.我在内部类中看到过一次,但是从那时起我检查了所有内部类,这个标志从未设置过.你现在知道这个标志的含义是什么,设置在何处/何时?
getModifiers()的Java Doc 如下:
int getModifiers()
以整数形式返回此Member表示的成员或构造函数的Java语言修饰符.应使用Modifier类来解码整数中的修饰符.
和Java Docs还提供了不同修饰符及其对应的int值的列表:
public static final int ABSTRACT 1024
public static final int FINAL 16
public static final int INTERFACE 512
public static final int NATIVE 256
public static final int PRIVATE 2
public static final int PROTECTED 4
public static final int PUBLIC 1
public static final int STATIC 8
public static final int STRICT 2048
public static final int SYNCHRONIZED 32
public static final int TRANSIENT 128
public …