一. 类文件结构ide
Class文件格式采用一种相似于C语言结构体的伪结构来存储数据。this
这种伪结构中只有两种数据类型:无符号数和表。编码
无符号数:基于基本的数据类型,以u一、u二、u四、u8来分别表明1个字节、2个字节、4个字节、8个字节的无符号数。能够用来描述数字、索引引用、数量值或按UTF-8编码构成字符串值。spa
表:由多个无符号数或其余表做为数据项构成的复合数据类型。,全部表都习惯性地以"_info"结尾。整个Class文件本质上就是一张表。索引
Class文件格式:接口
类型 | 名称 | 数量 | 说明 | 值 | 做用 |
u4 | magic | 1 | 魔数 | 0xCAFEBABE | 肯定这个文件是否为一个能被虚拟机接受的Class文件 |
u2 | minor_version | 1 | 次版本号 | 高版本的JDK向下兼容之前版本的Class文件 | |
u2 | major_version | 1 | 主版本号 | ||
u2 | constant_pool_count | 1 | 常量池容量计数值 | 容量计数是从1而不是0开始的 | |
cp_info | constant_pool | constant_pool_count-1 | 常量池 | 存放字面量和符号引用,常量池中的每一项常量都是一个表 | |
u2 | access_flags | 1 | 访问标志 | 识别一些类或接口层次的访问信息 | |
u2 | this_class | 1 | 类索引 | 用于肯定这个类的全限定名 | |
u2 | super_class | 1 | 父类索引 | 用于肯定这个类的父类的全限定名(除Object外全部类的父类索引都不为0) | |
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 | Class文件、字段表、方发表均可以携带本身的属性表集合、以用于描述某些场景专有信息 |