一. 類文件結構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文件、字段表、方發表均可以攜帶本身的屬性表集合、以用於描述某些場景專有信息 |