fields_count 表示當前類聲明的字段數量(含靜態字段,不含繼承字段)。fields 是長度為 fields_count 的 field_info 數組。


常見標志:ACC_PUBLIC(0x0001)、ACC_PRIVATE(0x0002)、ACC_PROTECTED(0x0004)、ACC_STATIC(0x0008)、ACC_FINAL(0x0010)、ACC_VOLATILE(0x0040)、ACC_TRANSIENT(0x0080)、ACC_SYNTHETIC(0x1000)、ACC_ENUM(0x4000)。
指向常量池 CONSTANT_Utf8_info,存儲字段簡單名稱(如 computer)。
指向常量池 CONSTANT_Utf8_info,存儲字段類型描述符(如 Lcom/bjpowernode/test/Computer;)。
字段屬性類型:ConstantValue(final 靜態常量值)、Deprecated、Synthetic(編譯器生成,如內部類外部引用)。
public class Programer extends Person {
private Computer computer;
public Programer(Computer computer) { this.computer = computer; }
public void doWork() { computer.calculate(); }
}
反編譯輸出:
Constant pool:
#5 = Utf8 computer
#6 = Utf8 Lcom/bjpowernode/test/Computer;
{
private com.bjpowernode.test.Computer computer;
flags: ACC_PRIVATE
}

字段 computer 對應的 field_info:access_flags=ACC_PRIVATE、name_index=#5、descriptor_index=#6。
methods_count 表示當前類聲明的方法數(含靜態方法、構造方法 <init>、類初始化器 <clinit>,不含繼承方法)。methods 是 method_info 數組。


新增標志:ACC_SYNCHRONIZED(0x0020)、ACC_BRIDGE(0x0040)、ACC_VARARGS(0x0080)、ACC_NATIVE(0x0100)、ACC_ABSTRACT(0x0400)、ACC_STRICT(0x0800)。
指向常量池 CONSTANT_Utf8_info(如 <init>、doWork)。
格式:(參數類型描述符)返回類型描述符。如 (LComputer;)V 表示接收 Computer 參數、返回 void。
關鍵屬性:
Constant pool:
#7 = Utf8 <init>
#8 = Utf8 (Lcom/bjpowernode/test/Computer;)V
#12 = Utf8 ()V
#19 = Utf8 doWork
{
public com.bjpowernode.test.Programer(com.bjpowernode.test.Computer);
flags: ACC_PUBLIC
public void doWork();
flags: ACC_PUBLIC
}

name_index=#7(<init>)、descriptor_index=#8doWork:name_index=#19、descriptor_index=#12| 結構 | 計數器 | 數組元素 | 核心索引引用 |
|---|---|---|---|
| 字段表 | fields_count | field_info[] | name_index、descriptor_index → CONSTANT_Utf8 |
| 方法表 | methods_count | method_info[] | name_index、descriptor_index → CONSTANT_Utf8;attributes → Code/Exceptions |
Class 文件通過常量池索引實現符號引用,字段與方法表結構高度一致,核心差異在於屬性表內容(方法包含 Code 屬性)。下篇將深入解析 Code、Exceptions 等關鍵屬性結構。