一. 類檔案結構
Class檔案格式采用一種類似于C語言結構體的僞結構來存儲資料。
這種僞結構中隻有兩種資料類型:無符号數和表。
無符号數:基于基本的資料類型,以u1、u2、u4、u8來分别代表1個位元組、2個位元組、4個位元組、8個位元組的無符号數。可以用來描述數字、索引引用、數量值或按UTF-8編碼構成字元串值。
類型 | 名稱 | 數量 | 說明 | 值 | 作用 |
u4 | magic | 1 | 魔數 | 0xCAFEBABE | 确定這個檔案是否為一個能被虛拟機接受的Class檔案 |
u2 | minor_version | 次版本号 | 高版本的JDK向下相容以前版本的Class檔案 | ||
major_version | 主版本号 | ||||
constant_pool_count | 常量池容量計數值 | 容量計數是從1而不是0開始的 | |||
cp_info | constant_pool | constant_pool_count-1 | 常量池 | 存放字面量和符号引用,常量池中的每一項常量都是一個表 | |
access_flags | 通路标志 | 識别一些類或接口層次的通路資訊 | |||
this_class | 類索引 | 用于确定這個類的全限定名 | |||
super_class | 父類索引 | 用于确定這個類的父類的全限定名(除Object外所有類的父類索引都不為0) | |||
interfaces_count | 接口索引數值 | ||||
interfaces | 接口索引集合 | 用來描述這個類實作了哪些接口 | |||
fields_count | |||||
field_info | fields | 字段表 | 用于描述接口或者類中聲明的變量(不包含方法内部聲明的局部變量) | ||
methods_count | |||||
method_info | methods | 方法表 | |||
attributes_count | |||||
attribute_info | attributes | Class檔案、字段表、方發表都可以攜帶自己的屬性表集合、以用于描述某些場景專有資訊 |