class檔案結構

2021-08-08 05:59:44 字數 1110 閱讀 3291

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型別的字面值...