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

JVM Class 文件結構深度解析:字段表集合

     編輯:Java 綜合教學

JVM Class 文件結構深度解析:字段表集合

Class 文件作為 JVM 執行的基礎單元,其結構嚴謹且層次分明。繼魔數、版本號、常量池、訪問標志、類/父類/接口索引之後,緊接著的是字段表集合。本文將詳細拆解字段表的結構、訪問標志、描述符及實際解析案例。

字段表集合概述

字段表用於描述類或接口中聲明的變量,包括類變量與實例變量,不包含方法內部的局部變量。緊接在接口索引集合之後,由多個 field_info 結構組成。

字段表結構

類型名稱數量
u2access_flags1
u2name_index1
u2descriptor_index1
u2attributes_count1
attribute_infoattributesattributes_count

字段訪問標志

access_flags 為 u2 類型,各標志位含義如下:

標志名稱標志值含義
ACC_PUBLIC0x0001public
ACC_PRIVATE0x0002private
ACC_PROTECTED0x0004protected
ACC_STATIC0x0008static
ACC_FINAL0x0010final
ACC_VOLATILE0x0040volatile
ACC_TRANSIENT0x0080transient
ACC_SYNTHETIC0x1000編譯器自動生成
ACC_ENUM0x4000enum

描述符與數據類型映射

name_index 和 descriptor_index 均為常量池索引,分別指向字段簡單名稱與描述符。描述符用於表示數據類型:

標志符含義
Bbyte
Cchar
Ddouble
Ffloat
Iint
Jlong
Sshort
Zboolean
Vvoid
L對象類型(如 Ljava/lang/String;)

數組類型每維度前綴 [,如 [[Ljava/lang/String; 表示二維字符串數組。

關鍵特性

  • 字段表不會列出繼承自父類/接口的字段。
  • 內部類為訪問外部類實例,編譯器會自動添加合成字段。
  • Java 語言不允許字段重載(同名不同類型),但字節碼層面若描述符不同則合法共存。

實戰解析案例

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

0x00 01  // fields_count = 1
0x00 02  // access_flags = ACC_PRIVATE
0x00 05  // name_index = #5 → 常量池第5項 "m"
0x00 06  // descriptor_index = #6 → 常量池第6項 "I" (int)
0x00 00  // attributes_count = 0

對應源碼:private int m; 解析完全吻合。

源文件

javap 常量池

字段表十六進制

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