===================================================================

1.结构


由于常量池中常量的数量是不固定的,所以常量池的入口需要放置一项u2类型的数据表示常量池容量计数值,如下:

本例中常量池中的常量的个数是35个,注意此处和java中的习惯不一样,这个容器的计数是从1而不是从0开始的,上图的结果是36,代表常量池中有35项常量,索引范围为1~35,0项常量有特殊考虑,当表达“不引用任何一个常量池项目”的含义时可以把索引值置为0来标示。

在constant_pool_count后是一个表数据类型constant_pool其中存储的就是constant_pool_count计数的那35个常量项。

2.存储数据的类型


常量池中主要存放两大类型常量:字面量(Literal)和符号引用(Symbolic References).

| 类型 | 说明 |

| — | :-- |

| 字面量 | 比较接近java语言层面的常量概念,如文本字符串,声明为final的常量值等 |

| 符号引用 | 属于编译原理方面的概念,包括这三种:

1.类和接口的全限定名

2.字段的名称和描述符

3.方法的名称和描述符 |

注意:

  1. 全限定名中的".“被替换为”/".比如

  1. 常量池中存储着最基本的信息,不仅程序会用到,而且Class文件本身也会通过#来引用

符号引用:

符号引用以一组符号来描述所引用的目标(com/dpb/test/Test),符号可以是任何形式的字面量,只要使用时能无歧义的定位到目标即可,符号引用和虚拟机实现的内存布局无关,引用的目标并不一定已经加载到了内存中

直接引用

直接引用可以指向目标的指针相对偏移量或者是一个能够直接定位到目标的句柄。直接引用于虚拟机的内存布局相关,同一个符号引用在不同的虚拟机实例上翻译出来的直接引用一

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

般不同。如果有了直接引用,那么,所引用的目标一定已经在内存中存在。

3.表的存储结构说明


通过观察我们发现,在这14中表中都有些相同的特定,比如表的开始的第一位都是一个u1类型的标志位(tag),代表当前属于哪种类型,具体的标志说明如下:

| 类型 | 标志(tag) | 描述 |

| :-- | — | :-- |

| 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 | 表示一个动态方法调用点 |

参考此表我们就能够看出这35个常量项的类型了。

从上面的结构我们也发现不同类型的表数据结构也是不相同的,详细结构如下,参考后会更加详细些。

| 常量 | 选项 | 类型 | 描述 |

| — | — | — | — |

| CONSTANT_Utf8_info | tag | u1 | 值为1 |

| length | u2 | UTF-8编码的字符串占用的字节数 |

| bytes | u1 | 长度为length的UTF-8编码的字符串 |

| CONSTANT_Integer_info | tag | u1 | 值为3 |

| bytes | u4 | 按照高位在前存储的int值 |

| CONSTANT_Float_info | tag | u1 | 值为4 |

| bytes | u4 | 按照高位在前存储的float值 |

| CONSTANT_Long_info | tag | u1 | 值为5 |

| bytes | u8 | 按照高位在前存储的long值 |

| CONSTANT_Double_info | tag | u1 | 值为6 |

| bytes | u8 | 按照高位在前存储的double值 |

| CONSTANT_Class_info | tag | u1 | 值为7 |

| index | u2 | 指向全限定名常量项的索引 |

| CONSTANT_String_info | tag | u1 | 值为8 |

| index | u2 | 指向字符串字面量的索引 |

| CONSTANT_Fieldref_info | tag | u1 | 值为9 |

Class文件结构介绍[常量池],埃森哲java技术面试题相关推荐

  1. Redis面试题(2020最新版),埃森哲java技术面试题

    前言 并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能.它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰.思维缜密,这样才能写出高效.安全.可靠的多线程并发程序 ...

  2. java面试英语自我介绍_【埃森哲java工程师面试】就是简单英文自我介绍。-看准网...

    其实对埃森哲不是很了解,在招聘网站上看到之后就填写了申请,本来因为没有对咨询有过经验,以为不会有网测之类的机会,结果就收到了网测,其实应该也不是海发,因为也有人没有收到,总而言之,网测通过之后就会收到 ...

  3. 埃森哲java笔试题_埃森哲的笔试经验

    埃森哲的笔试经验 今天起了一个大早,确实是大早,天还没有怎么亮!目的只有一个就是去参加埃森哲的笔试,地点在北航! 这是一个寒冷的大早,昨天晚上实验室的一个同学还说今天估计是个好天气,可惜天不从人愿,今 ...

  4. 大连埃森哲Java面试题

    美团技术一面20分钟 晚7点,因为想到下周一才面试,我刚准备出去打个羽毛球,北京的电话就来了.面试官各种抱歉,说开会拖延了. 1.自我介绍 说了很多遍了,很流畅捡重点介绍完. 2.问我数据结构算法好不 ...

  5. 【埃森哲员工笔试试题及答案】 - 面试网

    埃森哲员工笔试试题及答案: 36 题,除最后一道是 open question,5 道 GRE 题目(marathon to stamnina as fire to smoke,flame,light ...

  6. 埃森哲java转sfdc_【SFDC salesforce职责】2021年埃森哲SFDC salesforce岗位职责-看准网...

    其实对埃森哲不是很了解,在招聘网站上看到之后就填写了申请,本来因为没有对咨询有过经验,以为不会有网测之类的机会,结果就收到了网测,其实应该也不是海发,因为也有人没有收到,总而言之,网测通过之后就会收到 ...

  7. 埃森哲java笔试_【埃森哲Java面试】埃森哲java面试-看准网

    其实对埃森哲不是很了解,在招聘网站上看到之后就填写了申请,本来因为没有对咨询有过经验,以为不会有网测之类的机会,结果就收到了网测,其实应该也不是海发,因为也有人没有收到,总而言之,网测通过之后就会收到 ...

  8. 埃森哲 java_【埃森哲JAVA软件工程师面试】要求挺高,从面试到拿到offer历经时间长-看准网...

    其实对埃森哲不是很了解,在招聘网站上看到之后就填写了申请,本来因为没有对咨询有过经验,以为不会有网测之类的机会,结果就收到了网测,其实应该也不是海发,因为也有人没有收到,总而言之,网测通过之后就会收到 ...

  9. java面试题对日开发_【埃森哲Java面试】面试的是对日java的后端开发-看准网

    其实对埃森哲不是很了解,在招聘网站上看到之后就填写了申请,本来因为没有对咨询有过经验,以为不会有网测之类的机会,结果就收到了网测,其实应该也不是海发,因为也有人没有收到,总而言之,网测通过之后就会收到 ...

最新文章

  1. SZOJ 142 钦定
  2. Python 技术篇-百度语音合成API接口调用演示
  3. SQL Server 分区表的创建方法与管理
  4. QT的QAxBase类的使用
  5. PAT 1114 Family Property 并查集
  6. 十分钟搞定JeecgBoot 单体升级微服务!
  7. XP添加权限时提示:无法显示用户选项对话框的解决方法!
  8. java pipeline 实现_Docker+Jenkins+Pipeline实现持续集成(二)java项目构建
  9. FabFilter Total Bundle 2021 Mac - 经典音频效果器合集
  10. Normal Equation----machine learning
  11. 网络营销应该怎样做?巧用换IP软件
  12. 打造Linux三流娱乐环境,二流办公环境,一流Java开发环境
  13. itchat微信助手,kaggle 电影数据集分析,基于内容的电影推荐
  14. 数据库建模-概念模型建模(E-R图)
  15. 聊天记录怎么录视频 微信聊天记录屏幕录制
  16. 开箱即用的后台UI框架eui(原eadmin)
  17. 【飞控开发基础教程6】疯壳·开源编队无人机-SPI(六轴传感器数据获取)
  18. 【GIT】git常用命令
  19. java打地鼠游戏教案,幼儿园打地鼠游戏教案
  20. 如何在Vivado创建一个FIFO的IP核并使用ILA工具验证

热门文章

  1. 5、分组密码工作模式
  2. iOS开发之第三方分享QQ分享,史上最新最全第三方分享QQ方式实现
  3. C++的双缓冲队列机制
  4. 【移动机器人导航架构】navigation(mose_base)
  5. Java 并发核心机制
  6. MOS管栅极电阻的功耗该如何计算
  7. CSDN学院专属推荐--从Python小白走向Python工程师你只需要它!
  8. Win2008安装11g报错:orandce11.dll.dbl and orancds11.dll.dbl 文件找不到
  9. node.js使用Sequelize实现多表连接查询
  10. MybatisPlus多表联查分页多条件查