Java-Javaassist(二)

Class File Format

type descriptor remark
u4 magic 用来标识.class文件的开头
u2 minor_version minor_version与najor_version一起形成.class文件的版本号
u2 major_version
u2 constant_pool_count
cp_info constant_pool[constant_pool_coun-1] Java字节码中,有一个常量池,用来存放不同类型的常量,常量池中的项是铜鼓cp_info的类型来表示的
u2 access_flags 指定类或接口的访问权限
u2 this_class 指向constant pool的索引值,该值必须是CONSTANT_Class_info类型,指定当前字节码定义的类或接口
u2 super_class 指向constant pool的索引值,该值必须是CONSTANT_Class_info类型,指定当前字节码定义的类或接口的直接父类,只有Object类才没有父类,此时索引值为0,并且父类不能是final类型。接口的父类都是Object类型
u2 interfaces_count
u2 interfaces[interfaces_count] interfaces数组记录所有当前类或接口直接实现的接口。数组中的每一项都是指向constant pool的索引值,该值必须是CONSTANT_Class_info类型,数组中接口的顺序和源代码中接口定义的顺序相同
u2 fields_count
field_info fields[fields_count] fields数组记录了类或接口中的所有字段,包括实例字段和静态字段,但不包含父类或父接口中定义的字段。数组中每项都是field_info类型值,它描述了字段的详细信息,如名称、描述符、字段中的attribute等
u2 methods_count
method_info methods[methods_count] methods数组记录了类或接口中的所有方法,包括实例方法、静态方法、实例初始化方法和类初始化方法,但不包括父类或接口中定义的方法。methods数组中每项都是method_info类型值,它描述了方法的详细信息,如名称、描述符、方法中的attribute等
u2 attributes_count
attribute_info attributes[attributes_count] attributes数组记录了类或接口相关的所有Attribute项(和字节相关的Attributes在field_info的attributes中,和方法相关的Attributes在method_info的attributes中,和字节码相关的Attributes在Code Attribute的attributes中)。attributes数组中的每项都是attribute_info类型,它描述了Attribute的名称、详细信息等。该attributes数组描述了ClassFile的一些额外信息。JVM必须忽略它不能识别的Attribute,而且那些Attribute不能识别的Attribute也不能影响class文件的语义。

你可能感兴趣的:(Java-Javaassist(二))