6.1 Class類文件的結(jié)構(gòu)
Class文件是一組以8位字節(jié)位基礎(chǔ)單位的二進(jìn)制流,當(dāng)需要占用8位字節(jié)以上空間的數(shù)據(jù)項時,則會按照高位在前的方式分割成若干個8位字節(jié)進(jìn)行存儲。在存儲數(shù)據(jù)中只有兩種結(jié)構(gòu):無符號數(shù)和表。
- 無符號數(shù): 基本的數(shù)據(jù)類型,以u1佳励、u2、u4蛆挫、u8來分表表示1字節(jié)赃承、2字節(jié)、4字節(jié)悴侵、8字節(jié)瞧剖,可以用來描述數(shù)字、索引引用、數(shù)量值抓于、字符串值
- 表: 有多個無符號數(shù)或者其他表作為數(shù)據(jù)結(jié)項構(gòu)成的符合數(shù)據(jù)類型做粤,都習(xí)慣性的以_info結(jié)尾
總結(jié): Class結(jié)構(gòu)中的數(shù)據(jù)項,無論順序還是數(shù)量等都是被閹割限定的捉撮。
6.1.1 魔數(shù)和版本號
每個Class文件的頭4個字節(jié)稱之為魔數(shù)怕品,它的唯一作用是確定這個文件是否為一個能被虛擬機接受的Class文件,值為 0xCAFEBABE.
第56個字節(jié)是主版本號巾遭,78個字節(jié)是次版本號.
6.1.2 常量池
在版本號之后是常量池入口,常量池可以理解為Class文件之中的資源倉庫,是占用Class文件空間最大的數(shù)據(jù)項目之一.
- 常量池中的常量數(shù)量是不固定的肉康,所以有一個u2類型的數(shù)據(jù)項代表常量池的計數(shù)值
常量池中存放兩大類常量:字面量 和 符號引用.
- 字面量: 比較接近于java常量的概念,如字符串灼舍,申明為final的常量值吼和,
- 符號引用: 類和接口的全限定名 字段的名稱和描述符 方法的名稱和描述符
- 常量池中的每一個常量都是一個表
6.1.3 訪問標(biāo)志
access_flags用于識別一些類或者接口層次的訪問信息:
一共有16個標(biāo)志位可以使用,當(dāng)前只定義了8個片仿,沒有使用的要求一律為0纹安,通過 | 的方式組合.
6.1.4 類索引尤辱,父類索引與接口索引集合
類索引(this_class)和父類索引(super_class)都是u2類型數(shù)據(jù),接口索引(interfaces)是一組u2類型的數(shù)據(jù)集合