这里唠嗑一下,任何事情都不可能一蹴而就。但是朝着那个方向走,最终还是会到终点。虽说时不我待,但这就是宿命。人的诞生可能就注定了此生需要的修行~否则就是默默无闻的混日子罢了。
在原来看书的过程中看到过常量池的相关文章,但是在点线面体中无法连接到一个整体。今日翻开书籍再次阅读的时候,发现的结果是原来如此!
文章目录
class文件格式
ClassFile{
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constent_pool[constant_pool_count-1] //索引从1开始
u2 access_flags;
u2 this_class;
u2 super_class;
u2 interface_count;
u2 interface[interface_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attibutes_count];
}
U4说明占用4个字节,一个字节占8位(bit),内容无符号整数,以此内推!(一个字节最大的无符号整数为256,用十六进制需要两位!)
常量池类型 | tag的标识 | 意义 |
---|---|---|
CONSTANT_Uft8 | 1 | 存储字符常量,CONSTANT_String中存储的则是这里的索引值 |
CONSTANT_Integer | 3 | 整数,占用4个字节,存储int的数值 |
CONSTANT_Float | 4 | 浮点数,占用4个字节,存储float的数值 |
CONSTANT_Long | 5 | 长整型,占用8个字节,存储long的数值 |
CONSTANT_Double | 6 | 双精度浮点数,占用8个字节,存储double的数值 |
CONSTANT_Class | 7 | 代表类和接口的信息 |
CONSTANT_String | 8 | 存储的字符串的索引值,指向字符常量的索引 |
CONSTANT_Fieldref | 9 | 存储成员变量符号的引用。这些引用信息包括类名、变量、函数名,函数参数,返回值等 |
CONSTANT_Methodref | 10 | 存储成员函数符号的引用。这些引用信息包括类名、变量、函数名,函数参数,返回值等 |
CONSTANT_InterfaceMethodref | 11 | 存储接口函数符号的引用。这些引用信息包括类名、变量、函数名,函数参数,返回值等 |
CONSTANT_NameAndType | 12 | 用于描述类的成员域或成员函数相关的信息 |
CONSTANT_MethodHandle | 15 | 用于描述MethodHandle和反射。Java库中对应的类为java.lang.ivoke.MethodHandle |
CONSTANT_MethodType | 16 | 用于描述一个成员函数的信息,只包括函数的参数类型和返回值类型,不包括函数名和所属类的类名 |
CONSTANT_Dynamic | 17 | 动态计量常量 |
CONSTANT_Dynamic | 18 | 用于动态调用指令,类似于ruby,python有关功能 |