class位元組碼檔案結構
| 型別 |
名稱 |
說明 |
長度 |
數量 |
| u4 |
magic |
魔數,識別Class檔案格式 |
4個位元組 |
1 |
| u2 |
minor_version |
副版本號(小版本) |
2個位元組 |
1 |
| u2 |
major_version |
主版本號(大版本) |
2個位元組 |
1 |
| u2 |
constant_pool_count |
常量池計數器 |
2個位元組 |
1 |
| cp_info |
constant_pool |
常量池表 |
n個位元組 |
constant_pool_count-1 |
| u2 |
access_flags |
訪問標識 |
2個位元組 |
1 |
| u2 |
this_class |
類索引 |
2個位元組 |
1 |
| u2 |
super_class |
父類索引 |
2個位元組 |
1 |
| u2 |
interfaces_count |
介面計數器 |
2個位元組 |
1 |
| u2 |
interfaces |
介面索引集合 |
2個位元組 |
interfaces_count |
| u2 |
fields_count |
欄位計數器 |
2個位元組 |
1 |
| field_info |
fields |
欄位表 |
n個位元組 |
fields_count |
| u2 |
methods_count |
方法計數器 |
2個位元組 |
1 |
| method_info |
methods |
方法表 |
n個位元組 |
methods_count |
| u2 |
attributes_count |
屬性計數器 |
2個位元組 |
1 |
| attribute_info |
attributes |
屬性表 |
n個位元組 |
attributes_count |
Class檔案版本號和平臺的對應
| 主版本(十進制) |
副版本(十進制) |
編譯器版本 |
| 45 |
3 |
1.1 |
| 46 |
0 |
1.2 |
| 47 |
0 |
1.3 |
| 48 |
0 |
1.4 |
| 49 |
0 |
1.5 |
| 50 |
0 |
1.6 |
| 51 |
0 |
1.7 |
| 52 |
0 |
1.8 |
| 53 |
0 |
1.9 |
| 54 |
0 |
1.10 |
| 55 |
0 |
1.11 |
class檔案資料型別
| 資料型別 |
定義 |
說明 |
| 無符號數 |
無符號數可以用來描述數字、索引參考、數量值或按照utf-8編碼構成的字串值, |
其中無符號數屬于基本的資料型別, 以u1、u2、u4、u8來分別代表1個位元組、2個位元組、4個位元組和8個位元組 |
| 表 |
表是由多個無符號數或其他表構成的復合資料結構, |
所有的表都以“_info”結尾, 由于表沒有固定長度,所以通常會在其前面加上個數說明, |
型別描述符
| 標志符 |
含義 |
| B |
基本資料型別byte |
| C |
基本資料型別char |
| D |
基本資料型別double |
| F |
基本資料型別float |
| I |
基本資料型別int |
| J |
基本資料型別long |
| S |
基本資料型別short |
| Z |
基本資料型別boolean |
| V |
代表void型別 |
| L |
物件型別,比如:Ljava/lang/Object; |
| [ |
陣列型別,代表一維陣列,比如:double[][][] is [[[D |
常量型別和結構
| 型別 |
標志(或標識) |
描述 |
| CONSTANT_utf8_info |
1 |
UTF-8編碼的字串 |
| CONSTANT_Integer_info |
3 |
整型字面量 |
| CONSTANT_Float_info |
4 |
浮點型字面量 |
| CONSTANT_Long_info |
5 |
長整型字面量 |
| CONSTANT_Double_info |
6 |
雙精度浮點型字面量 |
| CONSTANT_Class_info |
7 |
類或介面的符號參考 |
| CONSTANT_String_info |
8 |
字串型別字面量 |
| CONSTANT_Fieldref_info |
9 |
欄位的符號參考 |
| CONSTANT_Methodref_info |
10 |
類中方法的符號參考 |
| CONSTANT_InterfaceMethodref_info |
11 |
介面中方法的符號參考 |
| CONSTANT_NameAndType_info |
12 |
欄位或方法的符號參考 |
| CONSTANT_MethodHandle_info |
15 |
表示方法句柄 |
| CONSTANT_MethodType_info |
16 |
標志方法型別 |
| CONSTANT_InvokeDynamic_info |
18 |
表示一個動態方法呼叫點 |
常量型別和結構細節


訪問標志
| 標志名稱 |
標志值 |
含義 |
| ACC_PUBLIC |
0x0001 |
標志為public型別 |
| ACC_FINAL |
0x0010 |
標志被宣告為final,只有類可以設定 |
| ACC_SUPER |
0x0020 |
標志允許使用invokespecial位元組碼指令的新語意,JDK1.0.2之后編譯出來的類的這個標志默認為真,(使用增強的方法呼叫父類方法) |
| ACC_INTERFACE |
0x0200 |
標志這是一個介面 |
| ACC_ABSTRACT |
0x0400 |
是否為abstract型別,對于介面或者抽象類來說,次標志值為真,其他型別為假 |
| ACC_SYNTHETIC |
0x1000 |
標志此類并非由用戶代碼產生(即:由編譯器產生的類,沒有原始碼對應) |
| ACC_ANNOTATION |
0x2000 |
標志這是一個注解 |
| ACC_ENUM |
0x4000 |
標志這是一個列舉 |
欄位表訪問標志
| 標志名稱 |
標志值 |
含義 |
| ACC_PUBLIC |
0x0001 |
欄位是否為public |
| ACC_PRIVATE |
0x0002 |
欄位是否為private |
| ACC_PROTECTED |
0x0004 |
欄位是否為protected |
| ACC_STATIC |
0x0008 |
欄位是否為static |
| ACC_FINAL |
0x0010 |
欄位是否為final |
| ACC_VOLATILE |
0x0040 |
欄位是否為volatile |
| ACC_TRANSTENT |
0x0080 |
欄位是否為transient |
| ACC_SYNCHETIC |
0x1000 |
欄位是否為由編譯器自動產生 |
| ACC_ENUM |
0x4000 |
欄位是否為enum |
類索引、父類索引、介面索引
| 長度 |
含義 |
| u2 |
this_class |
| u2 |
super_class |
| u2 |
interfaces_count |
| u2 |
interfaces[interfaces_count] |
屬性的通用格式
| 型別 |
名稱 |
數量 |
含義 |
| u2 |
attribute_name_index |
1 |
屬性名索引 |
| u4 |
attribute_length |
1 |
屬性長度 |
| u1 |
info |
attribute_length |
屬性表 |
資料型別和默認初始值對應
| 型別 |
默認初始值 |
| byte |
(byte)0 |
| short |
(short)0 |
| int |
0 |
| long |
0L |
| float |
0.0f |
| double |
0.0 |
| char |
\u0000 |
| boolean |
false |
| reference |
null |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/536207.html
標籤:其他
上一篇:每日演算法之翻轉單詞序列
下一篇:Springboot整合RabbitMQ基本使用