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常量池详解的主要内容,如果未能解决你的问题,请参考以下文章