Class文件结构-常量池
常量池里存放:
1.字面量(Literal)
• 文本字符串
• 声明为final的常量值(final的8种基本类型)
• 非final的基本类型也可能进(doublefloatlong)
2.符号引用(Symbolic References)
• 类和接口的全限定名(Fully Qualified Name)
• 字段的名称和描述符(Descriptor)
• 方法的名称和描述符
备注:
1. constant_pool_count=1表示常量池中有0个常量项
2. 表的第一个字节表示常量类型(tag)
常量项结构总表

示例:
package zero.desk.constantpool;
public class ConstantPool extends C implements A,B{
private String str = "test string";
private final int a = 10;
private final long b = 10;
private final long bb = 100;
private int c = 11;
private float d = 12f;
private float e = 12f;
private double ee = 12f;
private int m;
public int inc() {
return m + 1;
}
}
Constant pool:
#1 = Methodref #20.#50 // zero/desk/constantpool/C."<init>":()V
#2 = String #51 // test string
#3 = Fieldref #19.#52 // zero/desk/constantpool/ConstantPool.str:Ljava/lang/String;
#4 = Fieldref #19.#53 // zero/desk/constantpool/ConstantPool.a:I
#5 = Long 10l
#7 = Fieldref #19.#54 // zero/desk/constantpool/ConstantPool.b:J
#8 = Long 100l
#10 = Fieldref #19.#55 // zero/desk/constantpool/ConstantPool.bb:J
#11 = Fieldref #19.#56 // zero/desk/constantpool/ConstantPool.c:I
#12 = Float 12.0f
#13 = Fieldref #19.#57 // zero/desk/constantpool/ConstantPool.d:F
#14 = Fieldref #19.#58 // zero/desk/constantpool/ConstantPool.e:F
#15 = Double 12.0d
#17 = Fieldref #19.#59 // zero/desk/constantpool/ConstantPool.ee:D
#18 = Fieldref #19.#60 // zero/desk/constantpool/ConstantPool.m:I
#19 = Class #61 // zero/desk/constantpool/ConstantPool
#20 = Class #62 // zero/desk/constantpool/C
#21 = Class #63 // zero/desk/constantpool/A
#22 = Class #64 // zero/desk/constantpool/B
#23 = Utf8 str
#24 = Utf8 Ljava/lang/String;
#25 = Utf8 a
#26 = Utf8 I
#27 = Utf8 ConstantValue
#28 = Integer 10
#29 = Utf8 b
#30 = Utf8 J
#31 = Utf8 bb
#32 = Utf8 c
#33 = Utf8 d
#34 = Utf8 F
#35 = Utf8 e
#36 = Utf8 ee
#37 = Utf8 D
#38 = Utf8 m
#39 = Utf8 <init>
#40 = Utf8 ()V
#41 = Utf8 Code
#42 = Utf8 LineNumberTable
#43 = Utf8 LocalVariableTable
#44 = Utf8 this
#45 = Utf8 Lzero/desk/constantpool/ConstantPool;
#46 = Utf8 inc
#47 = Utf8 ()I
#48 = Utf8 SourceFile
#49 = Utf8 ConstantPool.java
#50 = NameAndType #39:#40 // "<init>":()V
#51 = Utf8 test string
#52 = NameAndType #23:#24 // str:Ljava/lang/String;
#53 = NameAndType #25:#26 // a:I
#54 = NameAndType #29:#30 // b:J
#55 = NameAndType #31:#30 // bb:J
#56 = NameAndType #32:#26 // c:I
#57 = NameAndType #33:#34 // d:F
#58 = NameAndType #35:#34 // e:F
#59 = NameAndType #36:#37 // ee:D
#60 = NameAndType #38:#26 // m:I
#61 = Utf8 zero/desk/constantpool/ConstantPool
#62 = Utf8 zero/desk/constantpool/C
#63 = Utf8 zero/desk/constantpool/A
#64 = Utf8 zero/desk/constantpool/B
Class文件结构-常量池的更多相关文章
- (十三)class文件结构:常量池(转)
Class类文件的结构 全局规范 1.任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口并不一定都得定义在文件里(譬如类或接口也可以通过类加载器直接生成).本章中,只是通俗 ...
- Java Core - Class文件结构之魔数、版本号、常量池
下图是一个.java文件被编译器编译后产生的二进制的class文件的内容:由图可知,class文件是用两位16进制数来表示的一个字节. 1个字节就是1Byte,1Byte=8bit. 一.魔数(CAF ...
- JVM之运行时常量池(Runtime Constant Pool)
基本特性: 方法区的一部分,在方法去中分配,加载泪或者接口后就创建运行时常量区. class文件每一个类或接口的常量池表(constant_pool table)的运行时表现形式, 包括编译期的数值字 ...
- 《Java虚拟机原理图解》 1.2.2、Class文件里的常量池具体解释(上)
[last updated:2014/11/27] NO1.常量池在class文件的什么位置? 我的上一篇文章<Java虚拟机原理图解> 1.class文件基本组织结构中已经提到了clas ...
- 【JVM虚拟机】(5)---深入理解JVM-Class中常量池
深入理解Class---常量池 一.概念 1.jvm生命周期 启动:当启动一个java程序时,一个jvm实例就诞生了,任何一个拥有main方法的class都可以作为jvm实例运行的起点. 运行:mai ...
- [一]class 文件浅析 .class文件格式详解 字段方法属性常量池字段 class文件属性表 数据类型 数据结构
前言概述 本文旨在讲解class文件的整体结构信息,阅读本文后应该可以完整的了解class文件的格式以及各个部分的逻辑组成含义 class文件包含了java虚拟机指令集 和 符号表 以及若 ...
- class字节码结构(一)(字节码结构和字节常量池的结构)
<Java虚拟机原理图解> 1.1.class文件基本组织结构 关于变量的几个叫法: 局部变量/全局变量:很好区分根据所在位置. 类变量:静态的全局变量. 类常量:全局的final修饰的变 ...
- 《Java虚拟机原理图解》 1.2.2、Class文件中的常量池详解(上)
我的上一篇文章<Java虚拟机原理图解> 1.class文件基本组织结构中已经提到了class的文件结构,在class文件中的魔数.副版本号.主版本之后,紧接着就是常量池的数据区域了,如下 ...
- Java中的常量池
JVM中有: Class文件常量池.运行时常量池.全局字符串常量池.基本类型包装类对象 常量池 Class文件常量池: class文件是一组以字节为单位的二进制数据流,在java代码的编译期间,编写的 ...
随机推荐
- js3——表格下拉
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- STM32F4 阿波罗寄存器 进阶版LED灯
上一节通过使用操作地址的方式进行了寄存器的操作,接下来通过两个部分,实现进阶版的操作寄存器(将寄存器的地址进行命名,然后使用名字进行调用 比如商场的A座5楼345号为卖玩具的,我们可以定义地址为sh ...
- 在phpstudy集成环境下的nginx服务器下配置url重写
直接在对应的vhosts.conf配置文件的location / {}中添加以下内容: location / { index index.html index.htm index.php; #auto ...
- javascript类数组
一.类数组定义: 而对于一个普通的对象来说,如果它的所有property名均为正整数,同时也有相应的length属性,那么虽然该对象并不是由Array构造函数所创建的,它依然呈现出数组的行为,在这种情 ...
- multipart/form-data 文件上传表单中 传递参数无法获取的原因!
1.什么是multipart/form-data 首先我们需要明白在html中的enctype属性, enctype:规定了form表单在发送到服务器时候编码方式.他有如下的三个值. ①applica ...
- mininet(二)简单的路由实验
mininet(一)实验环境搭建 mininet(二)简单的路由实验 mininet(三)简单的NAT实验 在网上找了 好几个代码都是不能直接复现成功,这里把自己实现成功的代码给大家演示一下. 实验的 ...
- 配置中心入门案例以及出现Could not resolve placeholder 'XXX' in value "${XXX}"的解决方式
编写配置中心的服务端 创建项目 修改 pom 文件添加 config-server 坐标 <?xml version="1.0" encoding="UTF-8&q ...
- CSUOJ2078-查找第k大(读入挂)
查找第k大 Submit Page Output 对于每组数据,输出第k大的数 Sample Input 1 6 2 1 2 3 4 5 6 Sample Output 5 Hint #include ...
- base64编码的字符串与图片相互转换
#region 图片转为base64编码的字符串---ImgToBase64String /// <summary> /// 图片转为base64编码的字符串 /// </summa ...
- Day 07 字符串内置方法和爬虫基础3
目录 异常处理 LeetCode使用之两数之和(示例) 字符串内置方法 爬虫基础3 selenium基本使用 selenium模拟百度登录 selenium爬取京东商品信息 异常处理 try: pri ...