1. 程式人生 > >Java的class檔案結構與理解

Java的class檔案結構與理解

class檔案採用一種類似C語言的結構,裡面只有兩種資料型別 1 無符號數 ,2 表。

無符號數屬於基本資料型別,用u1、u2、u4、u8來表示1個位元組,2個位元組,4個位元組,8個位元組。此型別用於描述數字、索引引用、按UTF-8編碼後的字串。

一個clas檔案結構圖:

 給一個編譯後的檔案:

1------前4個位元組16進製表示0xCAFEBABE 固定不變的魔數(寶貝咖啡,class的固定寫法)

2------看到第5位元組和6位元組表示副版本號0x0000和主版本號0x0033也就是十進位制51。查詢class版本號可知這個class檔案可以被JDK1.7.0 或者以上的虛擬機器執行的class檔案。

3------常量池計數器是從1開始計數,16進位制0016,換做十進位制為22,也就是常量池中有21個常量。索引值範圍1~21,

這裡注意:將索引值設定為0時有特殊含義,不引用任何一個常量池專案的含義。Class檔案中只有常量池的容量是從1計數開始。其它一般從0開始

4>常量池:常量池第一項,是0x07,查看錶6-3的標誌發現它屬於CONSTANT_Class_info型別。此型別的結構如上面的常量池的6-4圖,其中tag是標誌位已經說過了用於區分常量型別,name_index是一個索引值,它指向常量池中一個CONSTANT_Utf8_info型別的常量,這裡name_index的值(偏移地址0x0000000B)為0x0002也指向了常量池的第二項。然後依次繼續查詢。。。
常量型別

 

訪問標緻: