Java-Javaassist(二)
2018-04-24 本文已影响0人
Sandy_678f
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文件的语义。 |