类文件结构-属性表集合

在Class文件、字段表】方法表都可以携带自己的属性表集合,以用于描述某些场景专有的信息。

下表是Java虚拟机规范预定义的属性:

属性名称 使用位置 含义
Code 方法表 Java代码编译成的字节码文件
ConstantValue 字段表 final关键字定义的常量值
Deprecated 类、方法表、字段表 被声明为deprecated的方法和字段
Exceptions 方法表 方法抛出的异常
EnclosingMethod 类文件 仅当一个类为局部类或者匿名类是才能拥有这个属性,这个属性用于标识这个类所在的外围方法
InnerClasses 类文件 内部类列表
LineNumberTable Code属性 Java源码的行号和字节码指令的对应关系
LocalVariableTable Code属性 方法的局部变量描述
StrackMapTable Code属性 JDK1.6中新增的属性,供新的类型检查验证器检查和处理目标方法的局部变量和操作数栈所需要的类型是否匹配
Signature 类、方法表、字段表 JDK1.5中新增的属性,这个属性用于支持泛型情况下的方法签名
SourceFile 类文件 记录源文件名称
SourceDebugExtension 类文件 JDK1.6中新增的属性,SourceDebugExtension属性用于存储额外的调试信息。
Synthetic 类、方法表、字段表 标识方法或字段为编译器自动生成的
LocalVariableTypeTable JDK1.5中新增的属性,它使用特征签名代表描述符,是为了引入泛型语法之后能描述泛型参数化类型而添加
RuntimeVisibleAnnotations 类、方法表、字段表 JDK1.5中新增的属性,为动态注解提供支持,用于指明哪些注解是运行时可见的
RuntimeInvisibleAnnotations 类、方法表、字段表 JDK1.5中新增的属性,与RuntimeVisibleAnnotations属性作用相反,指明哪些注解是运行时不可见的
RuntimeVisibleParameterAnnotations 方法表 JDK1.5中新增的属性,与RuntimeVisibleAnnotations属性作用类似,只不过作用对象为方法参数
RuntimeInvisibleParameterAnnotations 方法表 JDK1.5中新增的属性,与RuntimeInvisibleAnnotations属性作用类似,只不过作用对象为方法参数
AnnotationDefault 方法表 JDK1.5中新增的属性,用于记录注解类元素的默认值
BootstrapMethods 方法表 JDK1.7中新增的属性,用于保存invokedynamic指令引用的引导方法限定符

属性表的结构如下:

类型 名称 数量
u2 attribute_name_index 1
u4 attribute_length 1
u1 info attribute_length