常量池里存放:
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文件结构-常量池的更多相关文章

  1. (十三)class文件结构:常量池(转)

    Class类文件的结构 全局规范 1.任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口并不一定都得定义在文件里(譬如类或接口也可以通过类加载器直接生成).本章中,只是通俗 ...

  2. Java Core - Class文件结构之魔数、版本号、常量池

    下图是一个.java文件被编译器编译后产生的二进制的class文件的内容:由图可知,class文件是用两位16进制数来表示的一个字节. 1个字节就是1Byte,1Byte=8bit. 一.魔数(CAF ...

  3. JVM之运行时常量池(Runtime Constant Pool)

    基本特性: 方法区的一部分,在方法去中分配,加载泪或者接口后就创建运行时常量区. class文件每一个类或接口的常量池表(constant_pool table)的运行时表现形式, 包括编译期的数值字 ...

  4. 《Java虚拟机原理图解》 1.2.2、Class文件里的常量池具体解释(上)

    [last updated:2014/11/27] NO1.常量池在class文件的什么位置? 我的上一篇文章<Java虚拟机原理图解> 1.class文件基本组织结构中已经提到了clas ...

  5. 【JVM虚拟机】(5)---深入理解JVM-Class中常量池

    深入理解Class---常量池 一.概念 1.jvm生命周期 启动:当启动一个java程序时,一个jvm实例就诞生了,任何一个拥有main方法的class都可以作为jvm实例运行的起点. 运行:mai ...

  6. [一]class 文件浅析 .class文件格式详解 字段方法属性常量池字段 class文件属性表 数据类型 数据结构

    前言概述  本文旨在讲解class文件的整体结构信息,阅读本文后应该可以完整的了解class文件的格式以及各个部分的逻辑组成含义   class文件包含了java虚拟机指令集 和  符号表   以及若 ...

  7. class字节码结构(一)(字节码结构和字节常量池的结构)

    <Java虚拟机原理图解> 1.1.class文件基本组织结构 关于变量的几个叫法: 局部变量/全局变量:很好区分根据所在位置. 类变量:静态的全局变量. 类常量:全局的final修饰的变 ...

  8. 《Java虚拟机原理图解》 1.2.2、Class文件中的常量池详解(上)

    我的上一篇文章<Java虚拟机原理图解> 1.class文件基本组织结构中已经提到了class的文件结构,在class文件中的魔数.副版本号.主版本之后,紧接着就是常量池的数据区域了,如下 ...

  9. Java中的常量池

    JVM中有: Class文件常量池.运行时常量池.全局字符串常量池.基本类型包装类对象 常量池 Class文件常量池: class文件是一组以字节为单位的二进制数据流,在java代码的编译期间,编写的 ...

随机推荐

  1. ActiveMQ配置策略

    1.消息发送 1.异步发送 消息生产者使用持久(persistent)传递模式发送消息的时候,Producer.send() 方法会被阻塞,直到 broker 发送一个确认消息给生产者,这个确认消息暗 ...

  2. 一道随机函数题:由rand5()生成rand7()

    题目:已知rand5()函数能随机等概率的生成0, 1, 2, 3, 4,利用rand5()函数编写一个rand7()函数实现相似的功能. 分析:其实就是利用rand5()组合成一个更大范围的数,之后 ...

  3. 大数据之Linux网卡配置

    当你安装好一台Linux之后,第一步自然是配置网卡,让你的Linux上网. 配置网卡大多数有两种模式,一种是桥接,一种是NAT 首先讲一下桥接网卡的上网原理,他是等同于在你现有的网络环境上直接现加一台 ...

  4. Java修炼——内部类详解

    内部类详解 定义:将一个类定义在另一个类的内部,该类就称为内部类 类中定义的内部类特点: 内部类作为外部类的成员,可以直接访问外部类的成员 (包括 private 成员),反之则不行. 内部类做为外部 ...

  5. nginx编译安装配置模块大全

    使用configure命令配置构建.它定义了系统的各个方面,包括允许nginx用于连接处理的方法.最后,它会创建一个Makefile.该configure命令支持以下参数:--help 打印帮助信息. ...

  6. HTML 02

    form表单 能够获取用户输入(包括输入, 选择和上传文件) 将用户的输入内容全部发送给后端 参数 action 向何处提交 不写, 默认朝当前页面所在地址提交数据 全写路径 (https://www ...

  7. Hybird App 应用开发中5个必备知识点复习

    前言 我们大前端团队内部 ?每周一练 的知识复习计划还在继续,本周主题是 <Hybird APP 混合应用专题> ,这期内容比较多,篇幅也相对较长,每个知识点内容也比较多. 之前分享的每周 ...

  8. 使用jmeter进行接口测试

    目录 jmeter介绍 jmeter安装 修改UTF-8 jmeter主要测试组件 jmeter元件作用域与执行顺序 使用Jmeter进行接口测试 jmeter介绍 JMeter是Apache基金会J ...

  9. 索引与Order By

    Order By 将对结果进行排序,这里的排序最大的特点是资源密集型,尽管多数时候它同时也是CPU密集型的.数据库在进行排序时,必须缓冲临时结果,读取到所有输入,并在完整的排序操作后才能产生第一个输出 ...

  10. Web基础了解版03-jQuery

    jQuery jQuery,顾名思义,也就是JavaScript和查询(Query)极大地简化了JavaScript开发人员遍历HTML文档.操作DOM.处理事件.执行动画和开发Ajax. jQuer ...