常量項(xiàng)的類(lèi)型和tag取值
| tag值 | 常量項(xiàng)類(lèi)型 | 含義 |
|---|---|---|
| 1 | CONSTANT_Utf8 | 用于存儲(chǔ)字符串的常量項(xiàng)。該項(xiàng)真正包含了字符串內(nèi)容。而 CONSTANT_String 常量項(xiàng)只存儲(chǔ)了一個(gè)指向 CONSTANT_Utf8 項(xiàng)的索引。 |
| 2 | ||
| 3 | CONSTANT_Integer | Java中,int 和 float 型數(shù)據(jù)的長(zhǎng)度都是4個(gè)字節(jié)。這兩種常量分別代表 int 和 float 型數(shù)據(jù)信息。 |
| 4 | CONSTANT_Float | |
| 5 | CONSTANT_Long | Java中, long 和 double 型數(shù)據(jù)的長(zhǎng)度都是8個(gè)字節(jié)。這兩種常量分別代表 long 以及 double 型數(shù)據(jù)信息。 |
| 6 | CONSTANT_Double | |
| 7 | CONSTANT_Class | 代表類(lèi)或接口的信息。 |
| 8 | CONSTANT_String | 代表一個(gè)字符串(String)。該常量本身不存儲(chǔ)字符串的內(nèi)容,它只是存儲(chǔ)了一個(gè)索引值。 |
| 9 | CONSTANT_Fieldref | 存儲(chǔ)成員變量的信息。信息包括所屬類(lèi)的類(lèi)名、變量、函數(shù)名、函數(shù)參數(shù)、返回值等。 |
| 10 | CONSTANT_Methodref | 存儲(chǔ)成員函數(shù)的信息。信息包括所屬類(lèi)的類(lèi)名、變量、函數(shù)名、函數(shù)參數(shù)、返回值等。 |
| 11 | CONSTANT_InterfaceMethodref | 存儲(chǔ)接口函數(shù)的信息。信息包括所屬類(lèi)的類(lèi)名、變量、函數(shù)名、函數(shù)參數(shù)、返回值等。 |
| 12 | CONSTANT_NameAndType | 這種類(lèi)型的常量項(xiàng)用于描述類(lèi)的成員域或成員函數(shù)相關(guān)的信息。 |
| 13 | ||
| 14 | ||
| 15 | CONSTANT_MethodHandle | 用于描述 MethodHandle 信息。MethodHandle 和反射有關(guān)系。Java類(lèi)庫(kù)中對(duì)應(yīng)的類(lèi)為 java.lang.invoke.MethodHandle 。 |
| 16 | CONSTANT_MethodType | 用于描述一個(gè)成員函數(shù)的信息。只包括函數(shù)的 參數(shù)類(lèi)型 和 返回值 ,不包括函數(shù)名和所屬類(lèi)的類(lèi)名。 |
| 17 | ||
| 18 | CONSTANT_InvokeDynamic | 用于 invokeDynamic 指令。invokeDynamic 和 Java 平臺(tái)上實(shí)現(xiàn)了一些動(dòng)態(tài)語(yǔ)言(如Python)相類(lèi)似的有關(guān)功能。 |
常見(jiàn)的常量項(xiàng)內(nèi)容
| 常量項(xiàng)名稱 | 數(shù)據(jù)結(jié)構(gòu) | 說(shuō)明 | |
|---|---|---|---|
| 大小 | 名稱 | ||
| CONSTANT_Utf8_info | u1 | tag | |
| u2 | length | ||
| u1 | bytes[ length ] | ||
| CONSTANT_Class_info | u1 | tag | |
| u2 | name_index | 指向 CONSTANT_Utf8_info | |
| CONSTANT_Fieldref_info | u1 | tag | |
| u2 | class_index | ||
| u2 | name_and_type_index | ||
| CONSTANT_String_info | u1 | tag | |
| u2 | string_index | 指向 CONSTANT_Utf8_info | |
| CONSTANT_MethodType_info | u1 | tag | |
| u2 | descriptor_index | 指向 CONSTANT_Utf8_info | |
| CONSTANT_Methodref_info | u1 | tag | |
| u2 | class_index | ||
| u2 | name_and_type_index | ||
| CONSTANT_NameAndType_info | u1 | tag | |
| u2 | name_index | 指向 CONSTANT_Utf8_info | |
| u2 | descriptor_index | 指向 CONSTANT_Utf8_info | |
| CONSTANT_InterfaceMethodref_info | u1 | tag | |
| u2 | class_index | ||
| u2 | name_and_type_index | ||
| CONSTANT_Long_info | u1 | tag | |
| u4 | high_bytes | ||
| u4 | low_bypes | ||
| CONSTANT_Integer_info | u1 | tag | |
| u4 | bytes | ||
| CONSTANT_Double_info | u1 | tag | |
| u4 | high_bytes | ||
| u4 | low_bypes | ||
| CONSTANT_Float_info | u1 | tag | |
| u4 | bytes |
信息描述規(guī)則
- 數(shù)據(jù)類(lèi)型的描述規(guī)則(基本數(shù)據(jù)類(lèi)型 和 引用類(lèi)型)。
- 成員變量的描述規(guī)則(Field Descriptor)。
- 成員函數(shù)的描述規(guī)則(Method Descriptor)。
數(shù)據(jù)類(lèi)型描述規(guī)則
| 數(shù)據(jù)類(lèi)型對(duì)照表 | |
|---|---|
| 數(shù)據(jù)類(lèi)型 | 類(lèi)型描述符 |
| byte | B |
| char | C |
| double | D |
| float | F |
| int | I |
| short | S |
| long | **J **(引用類(lèi)型已用L) |
| boolean | Z (byte類(lèi)型已用B) |
| 引用類(lèi)型 | LClassName;如:Ljava/lang/String; |
| 數(shù)組 | [ 其他數(shù)據(jù)類(lèi)型描述符 |
成員變量描述規(guī)則
與數(shù)據(jù)類(lèi)型描述規(guī)則相同。BaseType | ObjectType | ArrayType
成員函數(shù)描述規(guī)則
( ParameterDescriptor )ReturnDescriptorParameterDescriptor :FieldTypeReturnDescriptor:FieldType | VoidDescriptor ( V 代表 Void )