谈谈你对类文件结构的理解?有哪些部分组成?

Class 文件结构如下标所示:

图片

Class 文件没有任何分隔符,严格按照上面结构表中的顺序排列。无论是顺序还是数量,甚至于数据存储的字节序这样的细节,都是被严格限定的,哪个字节代表什么含义,长度是多少,先后顺序如何,都不允许改变。

  1. 魔数(magic):每个 Class 文件的头 4 个字节称为魔数(Magic Number),它的唯一作用是确定这个文件是否为一个能被虚拟机接受的Class 文件,即判断这个文件是否符合 Class 文件规范。

  2. 文件的版本:minor_version 和 major_version。

  3. 常量池:constant_pool_count 和 constant_pool:常量池中主要存放两大类常量:字面量(Literal)和符号引用(Symbolic References)。

  4. 访问标志:access_flags:用于识别一些类或者接口层次的访问信息。包括:这个 Class 是类还是接口、是否定义了 Public 类型、是否定义为 abstract 类型、如果是类,是否被声明为了 final 等等。

5.类索引、父类索引与接口索引集合:this_class、super_class和interfaces。

  1. 字段表集合:field_info、fields_count:字段表(field_info)用于描述接口或者类中声明的变量;fields_count 字段数目:表示Class文件的类和实例变量总数。

  2. 方法表集合:methods、methods_count

  3. 属性表集合:attributes、attributes_count

发表评论