JVM Class 類文件結構 (系列號2)

Class 文件的基本介紹

class 文件是一組以8字節爲基本單位的二進制流。各個數據按照順序緊湊的排列在class文件之中。遇到大於8字節的數據會分成若干個8位數據。

下圖就是class文件中的數據:

  •  魔數:類的識別號,就好比 文件的尾綴。但是這裏是放在前面。
  • Class版本號:注意JDK可以向前兼容版本,但是無法向後兼容Class文件。
  • Class文件常量池入口:注意與運行時的常量池區分,class文件常量池是 class 文件的資源倉庫。常量池中存放字面量和符號引用。字面量是指 表明爲final的常量,字符串等接近Java語言層面的常量含義。 符號引用則是 類、接口、方法的全名。Class文件是編譯後產生的,在沒有被執行(加載)之前,類裏面不會存在方法和方法裏的變量。所以,虛擬機運行時,都是需要到class文件常量池中獲得方法的符號引用,從而找到方法入口。
  • 訪問標誌:這個Class文件可被訪問的信息,比方這個Class是類還是接口,是否 public 是否 Abstract 型、是否被聲明爲 final等。
  • 索引:類索引、父類索引、接口索引;類索引就是這個類的全名,父類索引是父類全名,接口索引指向這個類的接口。
  • 字段表集合:表示類級的成員變量的修飾信息,比如這個字段被什麼所修飾(public final volidate)。需要注意的是這個字段表不會列出父類的字段。但是可能會有內部類的字段表。
  • 方法表集合:方法表的存在,使得虛擬機在查詢調用方法的速度上快了不少;方法的訪問標誌、方法名稱索引。方法重載在Java語言中依靠方法名和特徵簽名來確定,所以此情況下。僅僅返回值的不同也會進行方法重載。但是在class 文件中,在方法名和特徵簽名一致的情況下,返回值類型的不同也會造成方法的並存。而不會覆蓋父類的方法。
  • 屬性表集合:屬性表很特殊,注意它是描述類的屬性(下圖一),有(code,ConstantVlaue......)這當中的一個,比如code就是一個屬性表的表標題(下圖二),表的內容又有很多屬性描述。
可以作爲屬性表的屬性名稱
Code屬性表

Class 文件就基本介紹完了,點個贊就是兄弟喔...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章