常量的类型有12种

CONSTANT_Utf8_info1字面量UTF-8编码的字符串

CONSTANT_Integer_info3字面量整型字面量

CONSTANT_Float_info4字面量浮点型字面量

CONSTANT_Long_info5字面量长整型字面量

CONSTANT_Double_info6字面量双精度浮点型字面量

CONSTANT_Class_info7符号引用类或接口的符号引用

CONSTANT_String_info8字面量字符串类型字面量

CONSTANT_Fieldref_info9符号引用字段的符号引用

CONSTANT_Methodref_info10符号引用类中方法的符号引用

CONSTANT_InterfaceMethodref_info11符号引用接口中方法的符号引用

CONSTANT_NameAndType_info12符号引用字段或方法的部分符号引用

这些常量一般都是相互引用的,是一个常量引用了另一个常量,其中String等基本类型大家都很好理解,我们也不多做讨论,下面我们挑选几个相对来说不是很好理解的来说说,按照顺序来看

UTF8常量

看到UTF8我们就会想到,这是一种字符编码格式,可以存储多个字节长度的字符串值,例如可以存储方法名等很长的一个字符串。

UTF8类型一般是由前两个字节来表示后面所存储的字符串总字节数,例如 01004c,其中,01表示UTF8类型常量,004c表示后面的字节数,004c = 4*16+12 = 76,也就是后面有76字节数长度。大概结构如下,可以分成三部分理解,一是常量是什么格式,第二个是常量有多少字节,第三个是常量的实际内容。

[01 | byte byte |byte byte.....]

Fieldref、Methodref常量

这两个很明显是为了描述Class中的属性项还有方法的,那么如何去表示Class中的一个属性和方法呢?我们首先要分析一下这两个常量中都有哪些信息。

0900110010这个常量就是Fieldref常量,09是标识,0011表示该Fieldref是哪个类中的Field,存储的是第几个常量的位置,0010表示该常量名和类型也就是NameAndType类型常量的索引。Methodref与其类似,第一个自己表示的是常量类型10也就是0a。后面两个字节表示是该方法属于哪个类,后面表示的也是NameAndType类型常量的索引。

[09 | byte byte |byte byte|] [0a | byte byte |byte byte]

Class常量

Class常量表示的事该类的名称,它会指向另外一个UTF8类型的常量,该常量存储具体的该类的名称。例如070013,07表示的是Class类型常量,0013指向的是第19个常量,而当我们找到第19个常量,可以发现它是一个UTF8常量,并且可以发现它存储的就是一个类的名称。

[07 | byte byte]

NameAndType常量类型

该常量是为了表示Methodref和Fieldref的名称和类型描述做的进一步说明而存在的,名称一般是由UTF8常量来表,类型的描述也是由UTF8来表示,所以这个类型是由一个字节的类型标识加上两个字节的UFT8位置索引构成的。例如0c00070008,0007指向第七个常量,也就是Fieldref类型常量或者Methodref,0008指向的第八个常量则是Methodref的返回类型或者是Fieldref的参数类型。

[0c | byte byte |byte byte]

大家好,我是一个程序员,对,就是你们认为的那种程序员,平时会写点文章,一个是可以再这个过程自己也学习并能巩固,第二也是可以跟大家分享一下,各位同是猿类的可以帮忙点关注,点点赞来支持一下你们搬砖路上的小伙伴,谢谢啦。

java class文件常量池_JAVA程序员谈谈class文件结构中的常量池-class文件相关推荐

  1. java run里面定义变量_Java程序员50多道最热门的多线程和并发面试题(答案解析)...

    下面是Java程序员相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器 ...

  2. java的xml面试题_Java程序员的10个XML面试问答

    java的xml面试题 XML面试问题在各种编程工作面试中非常受欢迎,包括针对Web开发人员的Java面试 . XML是一项成熟的技术,通常用作从一个平台传输数据的标准. XML面试问题包含来自各种X ...

  3. Java业务面考什么_Java程序员面试技巧分享,面考官考查JAVA程序员常用的技术有哪些?...

    想要成为合格的Java程序员或工程师到底需要具备哪些专业技能呢?面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西. 大家可以把 ...

  4. java必须掌握哪些知识_Java程序员必须掌握的知识

    1.语法:Java程序员必须比较熟悉语法,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息 知道是什么样的语法错误并且知道任何修正. 2.命令:必须熟悉JDK带的一些常用命令及其常用选项, ...

  5. c++文件读取空格_程序员术与道:术—C语言对文件进行处理,文件处理的基本操作...

    各种编程语言都实现了文件的基本操作,提供了对应的接口,本篇文章先为你介绍C语言对文件进行处理和文件处理的基本操作.主要从以下几个方面进行介绍: 读取文件 写入文件 重命名文件 读取目录 读取目录下的文 ...

  6. java技术栈有哪些_Java程序员必备的21个核心技术,你都掌握了哪些?

    前言 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. ​1. JVM相关 对于刚刚接触Java的人来说,JVM相关的知识不一 ...

  7. java项目怎样提高性能_Java程序员成长之路(如何提高Java程序性能?)

    1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资 ...

  8. java获取字符串第一位_Java程序员经典面试题集大全 (十一)

    >>> 学习交流群 < < < 111. Java中byte表示的数值范围是什么? 答:范围是-128至127 112.如何将日期类型格式化为:2013-02-18 ...

  9. java tostring是什么意思_Java程序员不会用Lombok就落伍了

    1 Lombok背景介绍 官方介绍如下: Project Lombok makes java a spicier language by adding 'handlers' that know how ...

最新文章

  1. 谷歌如何通过机器学习实现逼真AR实时自拍效果
  2. Java开发神器Lombok的使用与原理
  3. 109. Convert Sorted List to Binary Search Tree
  4. 泰康人寿信息化三大核心战略:移动优先、数据驱动和云计算
  5. 如何用python最快的获取大文件的最后几行
  6. oracle表空间放在别的服务器,OracleXE的APEX可以访问同一服务器上的另一个Oracle数据库(10g),还是受限于XE数据库中的那些用户/表空间?...
  7. Objective-C 和 Swift 混编项目的小 Tips(一)
  8. 解封装(六):通过遍历获取AVStream音视频流信息并打印参数
  9. linux安装 treenms
  10. 视觉SLAM十四讲学习笔记——ch10 后端2
  11. 利用FFT成功实现拓扑识别(五)--关于频谱泄露
  12. word插入分隔符的方法
  13. cocos3.10 遇到企鹅游戏,点击屏幕白屏的解决方案
  14. python面向对象oo是什么意思_python进阶:面向对象是什么意思?
  15. 啊哈算法之水管工游戏
  16. Load, Modify, and Save an Image - 加载、修改和保存图像
  17. 软件测试简历上的职业技能怎么写,测试工程师岗位个人简历个人技能范文
  18. 以爬取知乎为例,进行python 多进程爬虫性能分析
  19. codeforces1718 A1.Burenka and Traditions (easy version)
  20. 手机浏览器调用手机qq客户端的js

热门文章

  1. mac怎么设置默认浏览器 mac默认浏览器设置方法
  2. ajax post django,Django中的Ajax POST请求失败
  3. java dos 菜单栏_学习java之电脑的常用快捷键和DOS窗口下的常用命令
  4. Springboot系列之Shiro、JWT、Redis 进行认证鉴权
  5. 学习Spring Boot:(八)Mybatis使用分页插件PageHelper
  6. Java注解的Retention和RetentionPolicy
  7. 基于mysql搭建框架环境搭建_Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境
  8. 日照职业单招计算机专业,日照职业技术学院单招专业介绍-机电一体化技术
  9. python中正则表达式的使用
  10. 史上最容易理解的暴力递归和动态规划~~