注意:

对于某个类而言,其class文件中至少要有两个CONSTANT_Class_info常量池项,用来表示自己的类信息和其父类信息。(除了java.lang.Object类除外,其他的任何类都会默认继承自java.lang.Object)如果类声明实现了某些接口,那么接口的信息也会生成对应的CONSTANT_Class_info常量池项。

除此之外,如果在类中使用到了其他的类,只有真正使用到了相应的类,JDK编译器才会将类的信息组成CONSTANT_Class_info常量池项放置到常量池中。如下图:packagecom.louis.jvm;

importjava.util.Date;

publicclassOther{

privateDate date;

publicOther()

{

Date da;

}

}  上述的Other的类,在JDK将其编译成class文件时,常量池中并没有java.util.Date对应的CONSTANT_Class_info常量池项,为什么呢?

在Other类中虽然定义了Date类型的两个变量date、da,但是JDK编译的时候,认为你只是声明了“Ljava/util/Date”类型的变量,并没有实际使用到Ljava/util/Date类。将类信息放置到常量池中的目的,是为了在后续的代码中有可能会反复用到它。很显然,JDK在编译Other类的时候,会解析到Date类有没有用到,发现该类在代码中就没有用到过,所以就认为没有必要将它的信息放置到常量池中了。

将上述的Other类改写一下,仅使用new Date(),如下图所示:

packagecom.louis.jvm;

importjava.util.Date;

publicclassOther{

publicOther()

{

newDate();

}

}

这时候使用javap -v Other ,可以查看到常量池中有表示java/util/Date的常量池项:

总结:

1.对于某个类或接口而言,其自身、父类和继承或实现的接口的信息会被直接组装成CONSTANT_Class_info常量池项放置到常量池中;

2. 类中或接口中使用到了其他的类,只有在类中实际使用到了该类时,该类的信息才会在常量池中有对应的CONSTANT_Class_info常量池项;

3. 类中或接口中仅仅定义某种类型的变量,JDK只会将变量的类型描述信息以UTF-8字符串组成CONSTANT_Utf8_info常量池项放置到常量池中,上面在类中的private Date date;JDK编译器只会将表示date的数据类型的“Ljava/util/Date”字符串放置到常量池中。

java 字符串池 原理_《Java虚拟机原理图解》1.2.2、Class文件中的常量池详解(上)...相关推荐

  1. java class文件常量池_《Java虚拟机原理图解》 1.2.3、Class文件中的常量池详解(下)...

    Java内存区域         1.程序计数器(Program Counter Register)(线程私有的)         2.Java虚拟机栈 (Java Virtual Machine S ...

  2. java 字符串格式替换_[Java] - 格式字符串替换方法

    Java 字符串格式替换方法有两种,一种是使用String.format(...),另一种是使用MessageFormat.format(...) 如下: import java.text.Messa ...

  3. java字符串含有特殊字符_[Java教程]判断输入的字符串是否含有特殊字符和表情_星空网...

    判断输入的字符串是否含有特殊字符和表情 2017-07-27 0 reg = /[~#^$@%&!?%*]/gi; if (reg.test(postdata.Name.trim())) { ...

  4. stringbuilder调用tostring常量池_彻底弄懂java中的常量池

    作者:tracy_666链接:https://www.jianshu.com/p/55f65dac1b4b JVM常量池主要分为Class文件常量池.运行时常量池,全局字符串常量池,以及基本类型包装类 ...

  5. java 字符串处理流程_一文带你了解Java字符串处理(String,StringBuffer,StringBuild)...

    前言本文篇幅较长,但都是满满的干货,请大家耐心观看,相信会有不小的收获.本人在总结的过程中也收获了很多的知识,也希望大家可以一起借鉴学习下,希望大家最后都能有所收获! 再言字符串的分类在java.la ...

  6. class字节码文件中的常量池结构详解

    文章目录 前言 方法区 常量池基本结构 JVM 所定义的11种常量 常量池元素的复合结构 常量池的结束位置 常量池元素总数量 第一个常量池元素 父类常量 变量型常量池元素 自己的学习笔记,部分节选自& ...

  7. Java中的常量池(字符串常量池、class常量池和运行时常量池)

    简介: 这几天在看Java虚拟机方面的知识时,看到了有几种不同常量池的说法,然后我就去CSDN.博客园等上找资料,里面说的内容真是百花齐放,各自争艳,因此,我好好整理了一下,将我自认为对的理解写下来与 ...

  8. java字符串底层实现_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...

    Java基础之字符串操作--String 字符串 什么是字符串?如果直接按照字面意思来理解就是多个字符连接起来组合成的字符序列.为了更好的理解以上的理论,我们先来解释下字符序列,字符序列:把多个字符按 ...

  9. java 字符串文字筛选_重新开始Java的原始字符串文字讨论

    java 字符串文字筛选 在2018年12月宣布 将从JDK 12中删除原始字符串文字 . 现在,在新的一年中,与Java中原始字符串文字的设计有关的讨论又开始了. 在琥珀色专家OpenJDK邮件列表 ...

最新文章

  1. 想服务器不宕机,你了解Linux“体检”指标吗?
  2. 【codevs1582】【BZOJ1228】E和D,博弈
  3. (转)淘淘商城系列——SSM框架整合之Service层整合
  4. 今晚鼓捣的audio.js一些小经验
  5. 随笔记录开发遇到的问题
  6. Tortoise SVN安装后右键没有菜单的解决方法
  7. WIN7下安装IIS
  8. 甲骨文CEO拉里-埃里森鲜为人知的11个特性
  9. C++计算机视觉库OpenCV在Visual Studio 2022的配置方法
  10. 数据结构绪论——什么是数据结构?
  11. 摘录《事实》汉斯·罗斯林
  12. Oracle中的日期和字符串互相转换以及格式化
  13. 教授专栏16 | 李家涛: 善用科技拓新价值 是经营致胜关键
  14. 供电3.3V 容量32Mbit 国产nor flash
  15. 简仪USB101—数据采集助手(AI)使用攻略
  16. ARM GIC(五) ARM TrustZone如何支持安全中断 分析笔记。
  17. 至强服务器系统配置截图,至强服务器操作系统
  18. 2017年11月23日学习笔记_用python解决杨辉三角函数,以及理解
  19. win10打开PLC通信出现未找到指定的访问点
  20. Linux命令-1-tail

热门文章

  1. 详解MRS CDL整体架构设计
  2. 解析对偶理论与对偶单纯性法
  3. 快来,这里有23种设计模式的Go语言实现
  4. 【评论分享有礼】毕业遇上疫情怎么办?4条技术指南轻松应对(内含求职、租房攻略)
  5. 爬虫智能解析库 Readability 和 Newspaper 的用法
  6. 开发者说:当垃圾箱有了智慧
  7. MySQL指定存储引擎命令_MySQL常用指令(2)——存储引擎
  8. 工作笔记-安装完virtualbox,新建好虚拟机却提示无法打开
  9. 交错排列(Alternating Permutation)问题详解
  10. VNC Viewer连接成功后闪退的解决办法