常量項(xiàng)的類型和tag取值
tag值 | 常量項(xiàng)類型 | 含義 |
---|---|---|
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 | 代表類或接口的信息。 |
8 | CONSTANT_String | 代表一個(gè)字符串(String)鸟蜡。該常量本身不存儲(chǔ)字符串的內(nèi)容膜赃,它只是存儲(chǔ)了一個(gè)索引值。 |
9 | CONSTANT_Fieldref | 存儲(chǔ)成員變量的信息揉忘。信息包括所屬類的類名跳座、變量、函數(shù)名癌淮、函數(shù)參數(shù)躺坟、返回值等。 |
10 | CONSTANT_Methodref | 存儲(chǔ)成員函數(shù)的信息乳蓄。信息包括所屬類的類名咪橙、變量、函數(shù)名、函數(shù)參數(shù)美侦、返回值等产舞。 |
11 | CONSTANT_InterfaceMethodref | 存儲(chǔ)接口函數(shù)的信息。信息包括所屬類的類名菠剩、變量易猫、函數(shù)名、函數(shù)參數(shù)具壮、返回值等准颓。 |
12 | CONSTANT_NameAndType | 這種類型的常量項(xiàng)用于描述類的成員域或成員函數(shù)相關(guān)的信息。 |
13 | ||
14 | ||
15 | CONSTANT_MethodHandle | 用于描述 MethodHandle 信息棺妓。MethodHandle 和反射有關(guān)系攘已。Java類庫(kù)中對(duì)應(yīng)的類為 java.lang.invoke.MethodHandle 。 |
16 | CONSTANT_MethodType | 用于描述一個(gè)成員函數(shù)的信息怜跑。只包括函數(shù)的 參數(shù)類型 和 返回值 样勃,不包括函數(shù)名和所屬類的類名。 |
17 | ||
18 | CONSTANT_InvokeDynamic | 用于 invokeDynamic 指令性芬。invokeDynamic 和 Java 平臺(tái)上實(shí)現(xiàn)了一些動(dòng)態(tài)語(yǔ)言(如Python)相類似的有關(guān)功能峡眶。 |
常見的常量項(xiàng)內(nèi)容
常量項(xiàng)名稱 | 數(shù)據(jù)結(jié)構(gòu) | 說明 | |
---|---|---|---|
大小 | 名稱 | ||
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ù)類型的描述規(guī)則(基本數(shù)據(jù)類型 和 引用類型)。
- 成員變量的描述規(guī)則(Field Descriptor)植锉。
- 成員函數(shù)的描述規(guī)則(Method Descriptor)辫樱。
數(shù)據(jù)類型描述規(guī)則
數(shù)據(jù)類型對(duì)照表 | |
---|---|
數(shù)據(jù)類型 | 類型描述符 |
byte | B |
char | C |
double | D |
float | F |
int | I |
short | S |
long | **J **(引用類型已用L) |
boolean | Z (byte類型已用B) |
引用類型 | LClassName;如:Ljava/lang/String; |
數(shù)組 | [ 其他數(shù)據(jù)類型描述符 |
成員變量描述規(guī)則
與數(shù)據(jù)類型描述規(guī)則相同。BaseType | ObjectType | ArrayType
成員函數(shù)描述規(guī)則
( ParameterDescriptor )ReturnDescriptorParameterDescriptor :FieldTypeReturnDescriptor:FieldType | VoidDescriptor ( V 代表 Void )