当前位置: 首页 > news >正文

Java虚拟机精讲【2.3】

3.6.2 ConstantValue属性

和 Code 属性一样, ConstantValue 属性同样也属于 Java 虚拟机必须识别出的 3 个属性之一, ConstantValue 属性位于 field_info 项的属性表中。在一个 field_info 项的属性表中最多只允许包含一个 ConstantValue 属性,该属性主要用于通知 Java 虚拟机对代码中的类变量(这里并不包括实例变量)执行初始化操作。简单来说,类变量的初始化操作有两种方式:一种是由类(接口)初始化方法<clinit>()完成,而另一种则由 ConstantValue 属性完成。如果一个类变量被 final 和 static 这两个关键字修饰后,并且数据类型是原始类型或者java.lang.String 类型的话,这个类变量就能够被 ConstantValue 属性执行初始化操作,反之一个类变量如果并没有被 final 关键字修饰,或者数据类型并非是原始类型或者 java.lang.String类型,那么则只能由<clinit>()方法完成其初始化操作。关于<clinit>()方法究竟是如何对类变量执行初始化操作的,请阅读 7.2.5 节。

参考《 Java 虚拟机规范( Java SE7 版)》的描述来看, Java 虚拟机只是强制要求了field_info 表中的 access_flag 项必须设置有 ACC_STATIC 标志,而 ACC_FINAL 标志并非是必需的,它只是一个可选项,因为仅仅只是前端编译器对 final 关键字有要求而已。在此大家需要注意,如果 field_info 表中的 access_flag 项并没有被设置 ACC_STATIC 标志时,那么Java 虚拟机将必须忽略掉它。 ConstantValue 属性的表结构信息,如下所示:

代码 3-23 ConstantValue_attribute 表结构 ConstantValue_attribute { u2 attribute_name_index; u4 attribute_length; u2 constantvalue_index; }

上 述 代 码 示 例 中 , attribute_name_index 项 中 的 值 是 一 个 指 向 常 量 池 列 表 中CONSTANT_Utf8_info(请阅读 3.3.1 节)常量项的有效索引,通过这个索引值即可成功获取当前属性的简单名称,即字符串“ ConstantValue”。 attribute_length 项的值被永远固定为 2。而 constantvalue_index 项中的值则是一个指向常量池列表中 CONSTANT_Long_info(请阅读3.3.4 节)、 CONSTANT_Double_info(请阅读 3.3.5 节)、 CONSTANT_Integer_info(请阅读3.3.2 节)、 CONSTANT_Float_info(请阅读 3.3.3 节)或者 CONSTANT_String_info(请阅读3.3.7 节)常量项的有效索引。

3.6.3 Exceptions属性

和 Code 属性以及 ConstantValue 属性一样, Exceptions 属性同样也属于 Java 虚拟机必须识 别 出 的 3 个 属 性之 一 , Exceptions 属性位于 method_info 项的属性表中。在一个method_info 项的属性表中最多只允许包含一个 Exceptions 属性,该属性主要用于列举出当前

http://www.jsqmd.com/news/721526/

相关文章:

  • C# 13编译器新特性深度联动:Span<T>如何触发JIT内联优化“隐藏开关”?(仅限.NET 8.0.3+)
  • 告别依赖地狱:Win H + WSL CentOS 搭建 Synopsys EDA 工具链实践
  • 按揭房再贷款不用愁!完整流程详解,选择靠谱助贷中介流程规范不踩雷 - 速递信息
  • QrazyBox:你的专业二维码修复与恢复工具包
  • 避坑指南:YOLOv5加SE注意力模块时,channel除不尽报错怎么解决?
  • Azkaban部署实战:搞定execute-as-user权限问题,让two-server模式一次跑通
  • 金融大语言模型的技术演进与实战应用
  • 终极指南:LeagueAkari如何让你的英雄联盟游戏体验提升300%
  • Java虚拟机精讲【2.4】
  • VideoMamba:高效视频理解的新架构与技术解析
  • 服装老板别乱跑银行!揭秘:为什么找对助贷中介,贷款成功率翻倍? - 速递信息
  • 用Python的SymPy和Matplotlib搞定高数作业:从求导到解微分方程,保姆级代码分享
  • 为什么特斯拉Model Y中控响应快3倍?逆向解析其C#通信栈中的RingBuffer+Hardware-Accelerated CRC优化(含可商用移植代码片段)
  • NCM文件解密工具全面解析:轻松转换网易云音乐加密格式
  • 从ROH到FERT:一文讲透SAP中10种常见物料类型的后台配置差异与业务含义
  • 当SHAP值遇上XGBoost/LightGBM:模型解释的实战陷阱与调优指南
  • 保姆级排错指南:Ubuntu安装GStreamer VAAPI插件后,为什么`gst-inspect`还是找不到vaapi?
  • 激光雷达点云与距离图像转换技术解析
  • PlantUML甘特图进阶玩法:自定义样式、关联JIRA任务、嵌入Confluence,打造可视化项目管理中心
  • 桑拿房安装公司排名 - 速递信息
  • PHP 8.9异步I/O工业级实践(含Swoole 5.1+OpenSSL 3.2双栈压测报告)
  • SoC验证IP选型指南:商用VIP核心价值与评估维度
  • 别再死记硬背了!用Python+Matplotlib动态可视化逻辑函数转换(真值表/卡诺图/波形图一键生成)
  • 竞赛回忆录
  • Tasmota设备与本地MQTT服务器双向通信实战:从订阅主题到控制设备
  • Logisim实战:手把手教你搞定16位海明码电路,附头歌平台避坑指南
  • HRNet实战:如何用PyTorch复现关键模块并可视化网络结构(附完整代码)
  • 3个核心功能+5步实战:PvZ Toolkit让你重新定义植物大战僵尸体验
  • Skillpilot:一键集成AI编码技能,提升开发效率与代码安全
  • PHP 8.9命名空间隔离:SaaS多租户架构最后1公里——如何用静态分析工具提前拦截99.6%的跨租户符号泄漏?