一.Class文件结构
Class文件是一组以8位字节为基础单位的二进制流,Class文件中有两种数据类型,分别是无符号数和表
1,无符号数,以u1、u2、u4、u8分别代表1个字节、2个字节、4个字节、8个字节的无符号数
2,表是由多个无符号数或者其它表作为数据项构成的复合数据类型,所以表都以“_info”结尾,由多个无符号数或其它表构成的复合数据类型
1.魔数
魔数,魔数的唯一作用是确定这个文件是否为一个能被虚拟机所接受的 Class 文件。魔数值固定为 0xCAFEBABE,不会改变。
2. Class文件版本
版本 JDK1.8是52
3. 常量池
常量池,constant_pool 是一种表结构,它包含 Class 文件结构及其子结构中引用的所有字符串常量、类或接口名、字段名和其它常量。
4. 访问标志
访问标志,access_flags 是一种掩码标志,用于表示某个类或者接口的访问权限及基础属性
5.类索引,父类索引,接口表
(1)this_class:类索引,this_class 的值必须是对 constant_pool 表中项目的一个有效索引值。
表示这个 Class 文件所定义的类或接口。
(2) supper_class:
父类索引,对于类来说,super_class 的值必须为 0 或者是对 constant_pool 表中项目的一个有效索引值。
(3)interface []:
接口表,interfaces[]数组中的每个成员的值必须是一个对 constant_pool 表中项目的一个有效索引值
6. 字段表集合
声明的所有字段,但不包括从父类或父接口继承的部分。
7.方法表集合
只描述当前类或接口中声明的方法,不包括从父类或父接口继承的方法。
8.属性表集合