Java类文件 访问标志

Java类文件中的访问标志是用于标识类或者接口的访问信息的。Java类中包含了许多不同的访问标志,这些标志用于表示不同的类访问信息,例如类是否是抽象类、是否为接口等等。

访问标志是Java类文件结构中的一个固定的长度为2个字节的无符号数。在Java类文件的结构中,访问标志的位置在常量池之后,类和接口的标志位之前。

下面是Java类文件中常见的访问标志:

ACC_PUBLIC:表示类、方法、字段等公共的,可以被任何类访问。
ACC_PRIVATE:表示方法、字段等只能在该类内部访问,而不能被其他类访问。
ACC_PROTECTED:表示方法、字段等只能被该类及其子类访问。
ACC_STATIC:表示方法、字段等是类级别的,而不是实例级别的。
ACC_FINAL:表示方法、字段等是不可改变的。
ACC_SYNCHRONIZED:表示方法是同步方法。
ACC_VOLATILE:表示字段是易失的(Volatile)。
ACC_TRANSIENT:表示字段是暂态的(Transient)。
ACC_ABSTRACT:表示类、方法等是抽象的,只有定义,没有实现。
ACC_STRICT:表示方法使用了严格的浮点运算。
访问标志的具体意义可以根据其名称来推断。在Java虚拟机规范中,也对各种访问标志进行了详细的说明。

访问标志的值是通过按位或运算来表示的。例如,一个类同时具有ACC_PUBLIC和ACC_FINAL两个访问标志,那么它的访问标志的值就是0x0011。在Java类文件中,访问标志总共是16位,因此最大值为0xFFFF。

以下是一个简单的Java类的访问标志的例子:

public final class MyClass {
    private static int myInt;
    public void myMethod() {}
}

这个类有三个访问标志,分别为ACC_PUBLIC、ACC_FINAL和0x0012(也就是ACC_STATIC)。其中,ACC_PUBLIC标志表示这个类是公共的,可以被任何类访问;ACC_FINAL标志表示这个类是不可改变的;0x0012(也就是ACC_STATIC)表示myInt字段是类级别的,而不是实例级别的。