荣华网荣华网

荣华网
荣华网知识网站

类的常量池,class文件命令大全

想必现在很多人对于类的常量池方面的知识都特别想要了解,如今小鱼也是在网络上收集了一些关于class文件命令大全方面的知识分享给大家,希望大家会喜欢哦。

类型

名称

数量

u2

major_version主版本号

1

u2

constant_pool_count常量池

1

cp_info

constant_pool

constant_pool_count-1

常量池:在版本后面,使用2个字节空间存储常量个数,紧接 cp_info 表结构逐个显示常量。也可喻为 class 文件资源仓库,还是 class 文件中第一个出现的表类型数据项目。

例如:常量池容量(偏移地址:0 x00000008)为十六进制 0 x0013,即10进制19,代表常量池中有18项常量。class 文件结构只有常量池的容量计数是从1开始,对于其他集合类型,包括接口索引集合,字段表集合,方法表集合的容量计数都是从0开始。

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

1. 字面量比较接近于java 语言层面的常量概念,如文本字符串,被声明为 final 常量值。

2. 而符号引用则属于编译原理方面概念,主要包括:

常量池中每项常量都是一个表,最初常量表中有11种表结构数据,为了更好的支持动态语言调用,到 jdk13增加到17种,

表结构起始的第一位是个 u1 类型的标志位,代表当前常量属于那种常量类型:

类型

标志

描述

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

接口方法符号引用

17种类型的常量数据结构汇总:

常量

项目

类型

描述

CONSTANT_Utf8_info

tag

u1

值为1

CONSTANT_Utf8_info

length

u2

utf-8编码字符串占用字节数

CONSTANT_Utf8_info

bytes

u1

长度 length 的utf-8编码字符串

CONSTANT_String_info

tag

u1

值为8

CONSTANT_String_info

index

u2

指向字符串字面量索引

CONSTANT_Fieldref_info

tag

u1

值为9

CONSTANT_Fieldref_info

index

u2

指向声明字段的类或接口描述符CONSTANT_Class_info的索引项

CONSTANT_Fieldref_info

index

u2

指向字段描述符CONSTANT_Name_AndType的索引项

CONSTANT_Methodref_info

tag

u1

值10

CONSTANT_Methodref_info

index

u2

指向声明方法的类描述符CONSTANT_Class_info索引项

CONSTANT_Methodref_info

index

u2

指向名称及类型描述符CONSTANT_NameAndType索引项

CONSTANT_Class_info

tag

u1

值为7

CONSTANT_Class_info

index

u2

指向全限定名常量项的索引

查看class文件 (使用winhex工具查看)如下图

javap 命令查看字节码文件: javap -verbose j1.class

赞(0) 打赏
欢迎转载分享:荣华网 » 类的常量池,class文件命令大全
分享到: 更多 ( 0 )

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

-荣华网

拨打电话