CONSTANT_Class_info 结构用于表示类或接口,格式如下:
CONSTANT_Class_info {
u1 tag;
u2 name_index;
}
CONSTANT_Fieldref_info, CONSTANT_Methodref_info 和CONSTANT_InterfaceMethodref_info
字段,方法和接口方法由类似的结构表示:
字段
CONSTANT_Fieldref_info {
u1 tag;
u2 class_index;
u2 name_and_type_index;
}
方法:
CONSTANT_Methodref_info {
u1 tag;
u2 class_index;
u2 name_and_type_index;
}
接口方法:
CONSTANT_InterfaceMethodref_info {
u1 tag;
u2 class_index;
u2 name_and_type_index;
}
CONSTANT_String_info 用于表示java.lang.String 类型的常量对象,格式如下:
CONSTANT_String_info {
u1 tag;
u2 string_index;
}
CONSTANT_Intrger_info 和CONSTANT_Float_info 结构表示4 字节(int 和float)的数值常量:
CONSTANT_Integer_info {
u1 tag;
u4 bytes;
}
CONSTANT_Float_info {
u1 tag;
u4 bytes;
}
CONSTANT_Long_info 和CONSTANT_Double_info 结构表示8 字节(long 和double)的数值常量:
CONSTANT_Long_info {
u1 tag;
u4 high_bytes;
u4 low_bytes;
}
CONSTANT_Double_info {
u1 tag;
u4 high_bytes;
u4 low_bytes;
}
CONSTANT_NameAndType_info 结构用于表示字段或方法,但是和字段、方法、接口方法结构不同,CONSTANT_NameAndType_info 结构没有标识出它所属的类或接口,格式如下:
CONSTANT_NameAndType_info {
u1 tag;
u2 name_index;
u2 descriptor_index;
}
CONSTANT_Utf8_info 结构用于表示字符串常量的值:
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
CONSTANT_MethodHandle_info 结构用于表示方法句柄,结构如下:
{
u1 tag;
u1 reference_kind;
u2 reference_index;
}
其中,tag 项的值为CONSTANT_MethodHandle(15)。reference_kind 项的值必须在1 至9 之间(包括1 和9),它决定了方法句柄的类型。reference_index 项的值必须是对常量池的有效索引。
CONSTANT_MethodType_info 结构用于表示方法类型:
CONSTANT_MethodType_info {
u1 tag;
u2 descriptor_index;
}
CONSTANT_InvokeDynamic_info 用于表示invokedynamic 指令所使用到的引导方法(Bootstrap Method)、引导方法使用到动态调用名称(Dynamic Invocation Name)、参数和请求返回类型、以及可以选择性的附加被称为静态参数(Static Arguments)的常量序列。
CONSTANT_InvokeDynamic_info {
u1 tag;
u2 bootstrap_method_attr_index;
u2 name_and_type_index;
}