一 class 属性计数器
attributes_count 的值表示当前 class 文件属性表的成员个数。属性表中每一项都是一个 attribute_info 结构。
二 属性表
attributes[](属性表)的每个项的值必须是 attribute_info 结构。属性表的结构比较灵活,各种不同的属性只要满足以下结构即可。
1 属性的通用格式
类型 |
名称 |
数量 |
含义 |
u2 |
attribute_name_index |
1 |
属性名索引 |
u4 |
attribute_length |
1 |
属性长度 |
u1 |
info |
attribute_length |
属性表 |
2 属性类型
属性表实际上可以有很多类型,上面看到的 Code 属性只是其中一种,Java8 里面定义了 23 种属性。下面这些是虚拟机中预定义的属性。
属性名称 |
使用位置 |
含义 |
Code |
方法表 |
Java 代码编译成的字节码指令 |
ConstantValue |
字段表 |
final 关键字定义的常量池 |
Deprecated |
类,方法,字段表 |
被声明为 deprecated 的方法和字段 |
Exceptions |
方法表 |
方法抛出的异常 |
EnclosingMethod |
类文件 |
仅当一个类为局部类或者匿名类时才能拥有这个属性,这个属性用于标识这个类所在的外围方法 |
InnerClass |
类文件 |
内部类列表 |
LineNumberTable |
Code 属性 |
Java 源码的行号与字节码指令的对应关系 |
LocalVariableTable |
Code 属性 |
方法的局部变量描述 |
StackMapTable |
Code 属性< |