Class文件结构介绍[常量池]

网友投稿 613 2022-11-05

Class文件结构介绍[常量池]

Class文件结构介绍[常量池]

概述

常量池是紧接着主次版本号之后出现的,常量池可以理解为class文件之中的资源仓库,它是Class文件结构中与其他项目管理最多的数据类型,也是占用Class文件空间最大的数据项目之一,同时它还是在Class文件中第一个出现的表类型数据项目。案例代码还是和前一篇的一样,如下:

public class Test { private int a; public int run(){ System.out.println("波波烤鸭"); return a=1; }}

常量池介绍

1.结构

在constant_pool_count后是一个表数据类型constant_pool其中存储的就是constant_pool_count计数的那35个常量项。

2.存储数据的类型

常量池中主要存放两大类型常量:字面量(Literal)和符号引用(Symbolic References).

注意:

3.表的存储结构说明

通过观察我们发现,在这14中表中都有些相同的特定,比如表的开始的第一位都是一个u1类型的标志位(tag),代表当前属于哪种类型,具体的标志说明如下:

类型

标志(tag)

描述

CONSTANT_Utf8_info

1

UTF-8编码的字符串

CONSTANT_Integer_info

3

整型字面量

CONSTANT_Float_info

4

浮点型字面量

CONSTANT_Long_info

5

长整型字面量

CONSTANT_Double_info

6

双精度浮点型字面量

CONSTANT_Class_info

7

类或接口的符号引用

CONSTANT_String_info

8

字符串类型字面量

CONSTANT_Fieldref_info

9

字段的符号引用

CONSTANT_Methodref_info

10

类中方法的符号引用

CONSTANT_InterfaceMethodref_info

11

接口中方法的符号引用

CONSTANT_NameAndType_info

12

字段或方法的部分符号引用

CONSTANT_MethodHandle_info

15

表示方法句柄

CONSTANT_MethodType_info

16

表示方法类型

CONSTANT_InvokeDynamic_info

18

表示一个动态方法调用点

从上面的结构我们也发现不同类型的表数据结构也是不相同的,详细结构如下,参考后会更加详细些。

参考《深入理解Java虚拟机》

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Stylist是一个高度可扩展的平台,用于创建和维护应用程序的基本Android XML主题集
下一篇:mybatis group by substr函数传参报错的解决
相关文章

 发表评论

暂时没有评论,来抢沙发吧~