常量池通用格式
cp_info {
u1 tag;
u1 info[];
}
tag 表示常量项类型,整理如下:
常量类型 | 值 | 描述 |
---|---|---|
CONSTANT_Class_info | 7 | 表示类或接口 |
CONSTANT_Fieldref_info | 9 | 字段信息表 |
CONSTANT_Methodref_info | 10 | 方法 |
CONSTANT_InterfaceMethodref_info | 11 | 接口方法 |
CONSTANT_String_info | 8 | java.lang.String 类型的常量对象 |
CONSTANT_Integer_info | 3 | 整型字面量 |
CONSTANT_Float_info | 4 | 浮点型字面量 |
CONSTANT_Long_info | 5 | 长整型字面量 |
CONSTANT_Double_info | 6 | 双精度型字面量 |
CONSTANT_NameAndType_info | 12 | 名称和类型表 |
CONSTANT_Utf8_info | 1 | utf-8 编码的字符串 |
CONSTANT_MethodHandle_info | 15 | 方法句柄表 |
CONSTANT_MethodType_info | 16 | 方法类型表 |
CONSTANT_InvokeDynamic_info | 18 | 动态方法调用点 |
对应具体类型分析如下:
1、CONSTANT_Class_info
功能: 表示类或接口
格式:
CONSTANT_Class_info {
u1 tag;
u2 name_index;
}
其中:tag 值为7,表示一个 CONSTANT_Class_info 类型
name_index, 必须是对常量池的一个有效索引。 常量池在该索引处的项必须是CONSTANT_Utf8_info 结构, 代表一个有效的类或接口二进制名称的内部形式。
2、CONSTANT_Fieldref_info