美文网首页
常量池表中的字面量和符号引用

常量池表中的字面量和符号引用

作者: Shaw_Young | 来源:发表于2021-07-29 10:32 被阅读0次

constant_pool [](常量池)

  • constant_pool 是一种表结构,以1 ~ constant_pool_count - 1为索引。表明了后面有多少个常量项。
  • 常量池主要存放两大类常量:字面量(Literal)符号引用(Symbolic Refrences)
  • 它包含了class文件结构及其子结构中引用的所有字符串常量、类或接口名、字段名和其他常量。常量池中的每一项都具备相同的特征。第1个字节作为类型标记,用于确定改项的格式,这个字节称为 tag byte(标记字节、标签字节)。
类型 标志(或标识) 描述
CONSTANT_utf8_info 1 UTF-8编码的字符串
CONSTANT_Integer_info 3 整型字面量
CONSTANT_Float_info 4 浮点型字面量
CONSTANT_Long_info 5 长整型字面量
CONSTANT_Double_info 6 双精度浮点型字面量
CONSTANT_Class_info 7 类或接口的符号引用
CONSTANT_String_info 8 字符串类型字面量
CONSTANT_Fieldref_info 9 字段的符号引用
CONSTANT_Methodref_info 10 类方法中的符号引用
CONSTANT_InterfaceMethodref_info 11 接口中方法的符号引用
CONSTANT_NameAndType_info 12 字段或方法的符号引用
CONSTANT_MethodHandle_info 15 表示方法句柄
CONSTANT_MethodType_info 16 标志方法类型
CONSTANT_InvokeDynamic_info 18 表示一个动态方法调用点

字面量和符号引用

在对这些常量解读前,我们要搞清楚几个概念。
常量池主要存放两大类常量:字面量(Literal)符号引用(Symbolic Refrences)。如下表:

常量 具体的常量
字面量 文本字符串
声明为final的常量值
符号引用 类和接口的全限定名
字段的名称和描述符
方法的名称和描述符

全限定名

com/young/test/Demo这个就是类的全限定名,仅仅是把包名的“.”替换成“/”,为了使连续的多个全限定名之间不产生混淆,在使用时最后一般会加入一个“;”表示全限定名结束。

简单名称

简单名称是指没有类型和参数修饰的方法或者字段名称,上面例子中的类的add()方法和num字段的简单名称分别是add和num。

描述符

描述符的作用是用来描述字段的数据类型、方法的参数列表(包括数量、类型以及顺序)和返回值。根据描述符规则,基本数据类型(byte、char、double、float、int、long、short、boolean)以及代表无返回值的void类型都用一个大写字符来表示,而对象类型则用字符L加对象的全限定名来表示,详见下表:

梦想很模糊,去追,它会渐变清晰。青春励志,奋斗下去别放弃。

相关文章

  • 常量池表中的字面量和符号引用

    constant_pool [](常量池) constant_pool 是一种表结构,以1 ~ constant_...

  • java学习——浅谈Java常量池

    一、概述 常量池:编译期被确定,*.class文件中的一部分,包含字面量(Literal)和符号引用(Symbol...

  • JVM学习5·常量池(方法区)

    1.Class常量池 Class常量池主要分为两个: 字面量 符号引用 下图中就是反编译之后的代码,我们可以观察到...

  • 4.Class类的文件结构

    文件结构 以8字节为一个单元.Class测试类 1.魔数 2.class版本 3.常量池存放字面量与符号引用。字面...

  • javaSE - 005 - java.lang.String

    总结:1.字面量 拼接 字面量,结果还是在常量池(内存剖析中有说)中创造一个新的字面量。java字符串常量池只会产...

  • 0. 详解python中格式化3种方法f/format/%

    一、字面量含义 1、字面量:以变量或常量给出的原始数据,在程序中可直接使用字面量2、字面量的差值:变量与常量以及表...

  • 深入理解JVM--常量池

    概述 (1)运行时常量池属于方法区的一块内存(2)用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后...

  • 2018-07-30

    常量 值不发生改变的量称为常量。C语言的常量可以分为直接常量和符号常量。直接常量也称为字面量,是可以直接拿来使用,...

  • 1 java常用类,枚举和注解

    String 中通过字面量来初始化的时候,都会将值存储到常量池中,常量池是不会存储相同内容字符串的,当对字符串引用...

  • 变量和常量在内存中的分配

    对于基础类型的变量和常量,变量和引用存储在栈中,常量存储在常量池中。 其实这里很好理解,常量池就是不会变化的量嘛,...

网友评论

      本文标题:常量池表中的字面量和符号引用

      本文链接:https://www.haomeiwen.com/subject/lagzmltx.html