首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

JVM Class 文件結構深度解析:魔數、常量池、字段表與方法表全景圖

     編輯:Java 綜合教學

文件整體結構

每個 Class 文件對應一個類/接口,但類不一定生成 Class 文件(如動態代理)。結構順序固定:

魔數(4B) → 版本號(4B) → 常量池 → 訪問標志(2B) 
→ 類/父類/接口索引 → 字段表集合 → 方法表集合 → 屬性表集合

核心區塊詳解

1. 魔數與版本

  • 魔數:0xCAFEBABE(咖啡寶貝),標識 Class 文件格式
  • 版本:次版本號 + 主版本號(JDK 1.1=45,每大版本+1,JDK 8=52)

2. 常量池 —— 核心資源倉庫

  • 容量計數器 constant_pool_count(從 1 開始,0 保留)
  • 14 種常量類型,tag 標識類型(UTF-8、Integer、Class、Methodref 等)
  • 兩大分類:
    • 字面量:字符串、final 常量
    • 符號引用:類全限定名、字段/方法名與描述符

3. 訪問標志

識別類/接口層級訪問權限(public、final、abstract、interface 等)。

4. 索引集合

  • this_class:指向常量池 CONSTANT_Class_info,確定當前類全限定名
  • super_class:父類索引(Object 除外均非 0)
  • interfaces:實現接口索引集合,順序按 implements 聲明

5. 字段表

描述類/實例變量(不含局部變量):

  • name_index:簡單名稱(如 name)
  • descriptor_index:描述符(如 Ljava/lang/String;、[[I)
  • 屬性表:ConstantValue(final 常量值)、註解等

6. 方法表

結構類似字段表,描述符包含參數列表與返回值:

int getIndex(String[] arr, String ele) 
→ 描述符:([Ljava/lang/String;Ljava/lang/String;)I

7. 屬性表

  • Code:方法字節碼、操作數棧、局部變量表
  • Exceptions:拋出異常列表
  • LineNumberTable/LocalVariableTable:調試信息
  • SourceFile/EnclosingMethod:源碼關聯

描述符規則速查

類型描述符
booleanZ
byteB
charC
shortS
intI
floatF
longJ
doubleD
引用類型L全限定名;
數組[描述符

掌握 Class 文件結構是理解 JVM 類加載、字節碼操作、框架原理的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved