常量池

3 篇文章 0 订阅
1 篇文章 0 订阅

在这里插入图片描述

介绍常量池之前先了解一个命令:javap
在这里插入图片描述

下面说一下常用指令:

  • javap -s 查看目标类的内部类型签名信息(描述符),包括:字段类型签名,方法的类型签名
  • javap -c 对目标class反编译,可以查看指令的执行过程。
  • javap -v 类的附加信息,可以用来查看常量池,也是我们今天需要用到的命令。

现在进入正题—常量池
jvm常量池其实包括两中类型:
在这里插入图片描述
1.编译时常量池(静态常量池)
所谓编译时常量池,就是我们把源码编译成class字节码是生成的常量池,我们可以通过javap -v命令查看。内容如下:

Constant pool:
   #1 = Methodref          #8.#25         // java/lang/Object."<init>":()V
   #2 = String             #26            // ss3333
   #3 = Fieldref           #7.#27         // com/yanyuman/test/Test.ss3:Ljava/lang/String;
   #4 = String             #28            // wwwww
   #5 = Fieldref           #7.#29         // com/yanyuman/test/Test.sss22:Ljava/lang/String;
   #6 = Fieldref           #7.#30         // com/yanyuman/test/Test.ss2:Ljava/lang/String;
   #7 = Class              #31            // com/yanyuman/test/Test
   #8 = Class              #32            // java/lang/Object
   #9 = Utf8               ss
  #10 = Utf8               Ljava/lang/String;
  #11 = Utf8               ConstantValue
  #12 = String             #33            // 1234
  #13 = Utf8               sss22
  #14 = Utf8               ss2
  #15 = Utf8               ss3
  #16 = Utf8               <init>
  #17 = Utf8               ()V
  #18 = Utf8               Code
  #19 = Utf8               LineNumberTable
  #20 = Utf8               getStr					//方法名称
  #21 = Utf8               ()Ljava/lang/String;		//修饰符
  #22 = Utf8               <clinit>
  #23 = Utf8               SourceFile
  #24 = Utf8               Test.java
  #25 = NameAndType        #16:#17        // "<init>":()V
  #26 = Utf8               ss3333
  #27 = NameAndType        #15:#10        // ss3:Ljava/lang/String;
  #28 = Utf8               wwwww
  #29 = NameAndType        #13:#10        // sss22:Ljava/lang/String;
  #30 = NameAndType        #14:#10        // ss2:Ljava/lang/String;
  #31 = Utf8               com/yanyuman/test/Test
  #32 = Utf8               java/lang/Object			//类全限定名
  #33 = Utf8               1234					//字面量

上面是class常量池的内容,通过分析可以看出constant Pool的结构和内容。
常量池内容如图3:
在这里插入图片描述
图3

那字面量有事什么呢?

1.文本字符串
2.八种基本类型的值
如 int a=10; 10即为字面量,
String ss = “string”; "string"就是字面量。

2.运行时常量池
运行时常量池就是在类被加载时,将class文件中的常量池载入到方法区中,也是普通意义上的常量池。代码运行时定义的常量值也存储到此常量池中。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值