000000 cafebabe
000004 0000
000006 0032
識別符號(magic 魔數)表示該檔案是標準的class檔案,jvm通過這4個位元組判斷該檔案是不是乙個class檔案
次要版本號
主要版本號 (0032—jdk1.5 || 0033—jdk1.6 || 0034—jdk1.7)
首先用兩個位元組表示常量數 如果是0028 則表示常量池中有27個常量。
索引值為1~27。第0項常量具有特殊意義,如果某些指向常量池索引值的資料在特定情況下需要表達「不引用任何乙個常量池專案」的含義,這種情況可以將索引值置為0來表示。
常量資訊 具體**見
訪問控制描述
這兩個位元組只用了5個bit分別是第1,5,6,10,12個bit 分別表示控制符
第1個bit 1-public 0-private
第5個bit 1-final
第6個bit 1-繼承了父類 預設整合object
第10個bit 1-inte***ce
第12個bit 1-abstract
類名稱指向常量池數字索引,
父類常量池數字索引
實現介面類
屬性數量
方法數量
訪問控制描述
第n位bit含義如下
1 public
2 private
3 protected
4 static
5 final
6 synchronized
7 volatile
8 transient
9 native
12 abstract
名稱 指向常量池
型別描述 指向常量池 描述
方法**長度
方法使用的最大棧的深度
本地常量的最大個數
以上兩個定義在jvm載入這個類的位元組碼到記憶體的驗證階段做檢查,如果發現超過了這兩個值,jvm會拒絕載入這個類。
表示這個方法中的**對應的jvm指令
丟擲異常數量
之後是**屬性描述,**本身的一些額外資訊,如用於除錯的資訊,行號,名稱。。。。
與field和method一樣,class同樣有附加屬性描述。
Class類檔案結構
定義 class檔案是一組以8位位元組為基礎單位的二進位製流,各個資料專案嚴格按照順序緊湊排列在class檔案之中,中間沒有新增任何分隔符。class檔案格式採用一種類似於c語言結構體的偽結構來儲存,這種偽結構中之餘兩種資料型別 無符號數和表 表是由多個無符號數或其他表作為資料項構成的符合資料型別 ...
JVM之Class檔案結構
但是乙個類或者介面不一定生成class檔案,classloader直接生成。各個資料項按照嚴格的順序排列在class檔案中,沒有任何分隔符,當遇到需要占用8位位元組以上的資料項時,則會按照高位在前 或低位在前 方式分割為若干個8位位元組儲存。big endian little endian。clas...
JVM學習筆記8 Class檔案結構
檔案結構魔數 版本常量池訪問符 類 超類 介面 字段方法 屬性 constant utf8 1 utf 8編碼的unicode字串 constant integer 3 int型別的字面值 constant float 4 float型別的字面值 constant long 5 long型別的字面值...