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

JVM Class 文件結構深度解析:方法表集合

     編輯:Java 綜合教學

JVM Class 文件結構深度解析:方法表集合

繼字段表集合之後,Class 文件結構進入方法表集合區域。方法表描述類/接口中聲明的所有方法(含構造函數、靜態方法等),結構與字段表高度相似,但屬性表中包含關鍵的 Code 屬性(存放字節碼指令)。

方法表結構

類型名稱數量
u2access_flags1
u2name_index1
u2descriptor_index1
u2attributes_count1
attribute_infoattributesattributes_count

方法訪問標志

標志名稱標志值含義
ACC_PUBLIC0x0001public
ACC_PRIVATE0x0002private
ACC_PROTECTED0x0004protected
ACC_STATIC0x0008static
ACC_FINAL0x0010final
ACC_SYNCHRONIZED0x0020synchronized
ACC_BRIDGE0x0040橋接方法
ACC_VARARGS0x0080可變參數
ACC_NATIVE0x0100native
ACC_ABSTRACT0x0400abstract
ACC_STRICTFP0x0800strictfp
ACC_SYNTHETIC0x1000編譯器生成

關鍵特性:方法重載與特征簽名

  • Java 語言中,方法重載要求同名但特征簽名不同(參數類型/數量/順序不同),返回值不參與特征簽名,故無法僅靠返回值重載。
  • Class 文件層面更寬鬆:只要描述符不完全一致(含返回值),同名方法即可合法共存。

實戰解析案例

某 Class 文件方法表區域十六進制片段:

0x00 02  // methods_count = 2
// 方法 1
0x00 01  // access_flags = ACC_PUBLIC
0x00 07  // name_index = #7 → "<init>"
0x00 08  // descriptor_index = #8 → "()V"
0x00 01  // attributes_count = 1
0x00 09  // attribute_name_index = #9 → "Code"
// 方法 2 ...(省略)

對應源碼含一個公共無參構造函數,解析吻合。

源文件

javap 常量池

方法表十六進制

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