JVM(4)类文件结构

class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在class文件中,中间没有分隔符。
class文件格式:

类型 名称 数量 描述
u4 magic 1 魔数
u2 minor_version 1 次版本号
u2 major_version 1 主版本号
u2 constant_pool_count 1 常量池容量(计数从1开始)
cp_info constant_pool constant_pool_count-1 常量
u2 access_flags 1 访问标志
u2 this_class 1 类索引
u2 super_class 1 父类索引
u2 interfaces_count 1 接口索引集合长度
u2 interfaces interfaces_count 接口索引集合
u2 fields_count 1 字段表长度
field_info fields fields_count 字段表集合
u2 methods_count 1 方法表长度
method_info methods methods_count 方法表集合
u2 attributes_count 1 属性表长度
attribute_info attributes attributes_count 属性表集合

1、魔数:0xCAFEBABE
2、版本号:版本号向下兼容,低版本JDK不能运行高版本的class文件。
3、常量池:常量池中主要存放两类常量:字面量和符号引用。
字面量包括文本字符串,声明为final的常量值等。
符号引用包括:类和接口的全限定名,字段的名称和描述符,方法的名称和描述符。
4、访问标记:用于识别一些类或者接口层次的访问信息。
5、类索引、父类索引与接口索引:用于确定类、父类、接口的全限定名。
6、字段表:用于描述接口或者类中声明的变量。
7、方法表:用于描述方法。
8、属性表:用于描述专有属性。

猜你喜欢

转载自blog.csdn.net/wee616/article/details/78286057