天天看點

JVM内部類指令

InnerClasses

    • InnerClasses屬性結構
    • inter_classes_info屬性結構
    • inner_class_access_flags标志(内部類通路标志)

InnerClasses屬性結構

       InnerClasses屬性用于記錄内部類與宿主類之間的關聯。如果一個類中定義了内部類,那編譯器将會為它以及它所包含的内部類生成InnerClasses屬性。

類型 名稱 數量
u2 attribute_name_index 1
u4 attribute_length 1
inter_classes_info inner_classes number_of_classes

       inter_classes_info代表記錄多少個内部類資訊,每一個内部類的資訊都由一個inter_classes_info表進行描述。

inter_classes_info屬性結構

類型 名稱 數量
u2 inner_class_info_index 1
u2 outer_class_info_index 1
u2 inner_name_index 1
u2 inner_class_access_flags 1

inner_class_access_flags是内部類通路标志;取值範圍如下圖:

inner_class_access_flags标志(内部類通路标志)

标志名稱 含義
ACC_PUBLIC 内部類是否為public
ACC_PRIVATE 内部類是否為private
ACC_PROTECTED 内部類是否為protected
ACC_STATIC 内部類是否為static
ACC_FINAL 内部類是否為final
ACC_INTERFACE 内部類是否為接口
ACC_ABSTRACT 内部類是否為abstract
ACC_SYNTHETIC 内部類是否為并非由使用者代碼産生的
ACC_ANNOTATION 内部類是否是一個注解
ACC_ENUM 内部類是否是一個枚舉

Synthetic屬性代表此字段或者方法并不是由Java源碼直接産生的,而是由編譯器自行添加的