Class 文件中常量池是「資源倉庫」,存儲字面量與符號引用,是連接各數據項的核心。本文結合十六進制分析與 javap 驗證,詳細解析常量池結構與 14 種表類型。
u2 constant_pool_count:容量計數(從 1 開始,0 表示不引用);final 常量值;CONSTANT_Class_info);CONSTANT_Fieldref_info);CONSTANT_Methodref_info);CONSTANT_InterfaceMethodref_info);CONSTANT_NameAndType_info)。| 類型 | 標志 | 描述 |
|---|---|---|
| CONSTANT_utf8_info | 1 | UTF-8 編碼字符串 |
| CONSTANT_Integer_info | 3 | 整型字面量 |
| CONSTANT_Float_info | 4 | 浮點型字面量 |
| CONSTANT_Long_info | 5 | 長整型字面量 |
| CONSTANT_Double_info | 6 | 雙精度浮點型字面量 |
| CONSTANT_Class_info | 7 | 類/接口符號引用 |
| CONSTANT_String_info | 8 | 字符串字面量 |
| CONSTANT_Fieldref_info | 9 | 字段符號引用 |
| CONSTANT_Methodref_info | 10 | 類方法符號引用 |
| CONSTANT_InterfaceMethodref_info | 11 | 接口方法符號引用 |
| CONSTANT_NameAndType_info | 12 | 字段/方法名與描述符 |
| CONSTANT_MethodType_info | 16 | 方法類型 |
| CONSTANT_MethodHandle_info | 15 | 方法句柄 |
| CONSTANT_InvokeDynamic_info | 18 | 動態調用點 |
每表首字節為 u1 tag 標識類型。
某 Class 文件常量池計數 0x0013 = 19,即 1~18 共 18 項。首項 0x0a = 10 對應 CONSTANT_Methodref_info。使用 javap -verbose 可直接查看完整常量池表,驗證手工分析結果。


CONSTANT_utf8_info 最大長度 64KB,限制 Java 標識符長度;Long/Double 佔用兩個常量池槽位(歷史原因);utf8_info,實現字符串共享。