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

JVM Class 文件結構深度解析:屬性表集合

     編輯:Java 綜合教學

JVM Class 文件結構深度解析:屬性表集合

Class 文件、字段表、方法表均可攜帶屬性表集合,用於描述特定場景的專有信息。JVM 預定義了 20 多種屬性,本文重點講解最核心的 Code、Exceptions、LineNumberTable 等屬性結構。

屬性表通用結構

類型名稱數量
u2attribute_name_index1
u4attribute_length1
u1infoattribute_length

屬性名從常量池引用 CONSTANT_Utf8_info,值結構自定義,長度由 attribute_length 指定。

預定義屬性速查表

屬性名稱使用位置含義
Code方法表Java 代碼編譯的字節碼指令
ConstantValue字段表final 常量值
Deprecated類/方法/字段標記棄用
Exceptions方法表方法拋出的受查異常
InnerClasses類文件內部類列表
LineNumberTableCode 屬性源碼行號與字節碼對應
LocalVariableTableCode 屬性方法局部變量描述
SourceFile類文件源文件名
Signature類/方法/字段泛型簽名支持
RuntimeVisibleAnnotations類/方法/字段運行時可見注解

核心屬性深度解析

1. Code 屬性

存放方法體字節碼,結構:

項目類型說明
max_stacku2操作數棧最大深度
max_localsu2局部變量表大小
code_lengthu4字節碼長度
codeu1[]字節碼指令流
exception_tableexception_info[]異常處理表
attributesattribute_info[]嵌套屬性(如 LineNumberTable)

接口方法、抽象方法、native 方法無 Code 屬性。

2. Exceptions 屬性

列出方法 throws 聲明的受查異常:

項目類型
number_of_exceptionsu2
exception_index_table[]u2[]

每項為常量池 CONSTANT_Class_info 索引。

3. LineNumberTable 屬性

建立源碼行號與字節碼偏移量映射,供調試器定位:

項目類型
line_number_table_lengthu2
line_number_info[]{start_pc, line_number}

提示: 現代開發無需手工解析十六進制,推薦使用 javap -v、jclasslib、IDEA 插件等工具直接查看結構化輸出。

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