java常量池详解

Posted Fire king

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java常量池详解相关的知识,希望对你有一定的参考价值。

在这里插入图片描述

在这里插入图片描述

0A=10->tag=10->CONSTANT Methodref(方法常量引用)
在这里插入图片描述
占u1+u2+u2=5字节,两个index均为索引值,
第一个index=00 04=4,指向常量#4,查看反编译文件
在这里插入图片描述
第二个index=00 11=17,指向常量#17,查看反编译文件
构造方法,()V无参void返回值
在这里插入图片描述
综合常量引用CONSTANT Methodref说明执行了 java/lang/Object的无参构造方法。
2.
在这里插入图片描述

09=9->tag=9->CONSTANT Fieldreff(字段常量引用)
在这里插入图片描述
占u1+u2+u2=5字节,两个index均为索引值,
第一个index=00 03=3,指向常量#3,查看反编译文件
声明了该字段所属的类的类名
在这里插入图片描述
第一个index=00 12=18,指向常量#18,查看反编译文件
声明了该字段的名称和类型,分别为name和String
在这里插入图片描述
3.
在这里插入图片描述

07=07->tag=07->CONSTANT _Class_info(方法信息常量引用)
在这里插入图片描述

占u1+u2=3字节。
index=00 13=19,指向常量#19,查看反编译文件
在这里插入图片描述
4.
在这里插入图片描述
07=07->tag=07->CONSTANT _Class_info(方法信息常量引用)
在这里插入图片描述

占u1+u2=3字节。
index=00 14=20,指向常量#20,查看反编译文件
在这里插入图片描述
5.

在这里插入图片描述

01=01->tag=01->CONSTANT _utf8_info
在这里插入图片描述
04=length,往后数4个字节
在这里插入图片描述

6E 61 6D 65
在这里插入图片描述
6.
在这里插入图片描述
在这里插入图片描述

4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B

在这里插入图片描述
说明5中name字段是String类型
7.
在这里插入图片描述
在这里插入图片描述
3C 69 6E 69 74 3E
在这里插入图片描述
8.
在这里插入图片描述
在这里插入图片描述
28 29 56
在这里插入图片描述
9.
在这里插入图片描述
在这里插入图片描述
43 6F 64 65
在这里插入图片描述
7~9:
在这里插入图片描述
10.
在这里插入图片描述
在这里插入图片描述
4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65
在这里插入图片描述
行数表:代码行和指令之间的映射关系,这就是为什么java代码运行出错会出现打印出哪一行出错。
在这里插入图片描述
11.
在这里插入图片描述
在这里插入图片描述
67 65 74 4E 61 6D 65

在这里插入图片描述
getName方法的方法名
12.
在这里插入图片描述
在这里插入图片描述
28 29 4C 6A 61 76 61 2F 6C 6E 67 2F 53 74 72 69 6E 67 3B
在这里插入图片描述
getName方法无参,返回值为string类型
13.
在这里插入图片描述
在这里插入图片描述
73 65 74
在这里插入图片描述
set方法的名称
14.
在这里插入图片描述
在这里插入图片描述

28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56
在这里插入图片描述
set方法参数string类型,返回值为空
15.
在这里插入图片描述
在这里插入图片描述
53 6F 75 72 63 65 46 69 6C 65
在这里插入图片描述
16.
在这里插入图片描述
在这里插入图片描述
41 64 6D 69 6E 2E 6A 61 76 61
在这里插入图片描述
指定源文件为Admin.java
在这里插入图片描述
17.
在这里插入图片描述
在这里插入图片描述
00 07=7->#7
在这里插入图片描述
00 08=8->#8
在这里插入图片描述
18.
在这里插入图片描述
00 08=5->#5
在这里插入图片描述
00 06=6->#6
在这里插入图片描述
19.
在这里插入图片描述
在这里插入图片描述
63 6F 6D 2F 73 74 6F 72 65 2F 70 6F 6A 6F 2F 41 64 6D 69 6E
在这里插入图片描述
name所属的包
20.
在这里插入图片描述
在这里插入图片描述
6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74
在这里插入图片描述
21.
在这里插入图片描述
this没有传入参数也能用的原因。

完美结束
22.总结
在这里插入图片描述
.class二进制文件指导反编译的.class文件常量池将类信息串联起来,
在这里插入图片描述
以此描述:
在这里插入图片描述
在这里插入图片描述
2.
2.1.access_flag 类的权限描述符(2个字节)
0x0001(ACC_PUBLIC)和0x0020(ACC_SUPER)位运算得到00 21,
因此类的权限描述符 为 ACC_PUBLIC和ACC_SUPER
在这里插入图片描述
在这里插入图片描述
2.2.this class name(2个字节,索引值)
在这里插入图片描述
0030=3->#3,this class name= com.store.pojo.Admin
在这里插入图片描述
2.3.super class name(2个字节,索引值)
在这里插入图片描述
00 04=4->#4,.super class name=java/lang/Object
在这里插入图片描述
2.3.实现接口的个数(2个字节)
在这里插入图片描述
00 00=0个接口,推测出一个类最大实现接口个数FFFF=65535个
2.4.字段的个数(2个字节)
在这里插入图片描述
00 01=1个
在这里插入图片描述
2.5.filed_info(1)(有几个字段括弧就为几)
通过组成.filed_info(1)的字段访问修饰符、字段名称的索引和descciptor_index来唯一确定一个字段。
在这里插入图片描述

在这里插入图片描述
u2字段访问修饰符:00 02 =2=ACC_PRIVATE
在这里插入图片描述

u2字段名称的索引:00 05=5->#5
在这里插入图片描述
u2 descciptor_index(字段描述索引)
在这里插入图片描述
00 06=6->#6
在这里插入图片描述
在这里插入图片描述

u2 attribute_info表示有没有加transfer等等
00 00表示没有加
2.6.methods_count
在这里插入图片描述

u2 00 03=3个方法
在这里插入图片描述

2.7.Method_info字段结构

以上是关于java常量池详解的主要内容,如果未能解决你的问题,请参考以下文章

JVM中的常量池详解

Java常量池详解

java常量池详解

java中的String类常量池详解

Java常量池详解之Integer缓存

JVM——字符串常量池详解