JAVA-JVM 之Class字节码文件的组成 【下篇】

字节码

  • 类元数据
  • 接口元数据
  • 字段元数据
  • 方法元数据
  • 属性元数据

在这里插入图片描述

主页传送门:📀 传送

类元数据


  此部分元数据主要包含类索引(This_Class)和父类索引(Super_Class)。

  • 类索引:指向Class字节码常量池表中的一个有效索引值,u2 数据类型,用于确定该类的全限定名。该索引对应的数据项必须为CONSTANT_Class_info类型常量。表示该Class文件定义的类或接口。

  • 父类索引:必须为常量池中项目的一个有效索引值,u2数据类型,用于确定该类的全限定名。该索引涉及的数据项同样必须为CONSTANT_Class_info类型常量。若它的值不为0,那么直接表示该Class文件定义的类的直接父类。

  • 于接口而言,Class文件的Super_Class项的值必须是常量池中数据项的一个有效索引值。常量池在该索引处的项必须为代表java.lang.Object的CONSTANT_Class_info类型常量。若Class文件的Super_Class的值为0,那么该文件只可能是定义java.lang.Object类,因为它是唯一没有父类的类。

接口元数据


接口元数据主要包含接口计数器(u2的无符号数)和接口数据表(u2的无符号数)俩部分。

接口计数器表示当前类或接口的直接父接口的数量。

接口数据表的每个成员值必须是一个常量池中数据项的有效索引值,它的长度为接口计数器。每个成员interface数据项必须为CONSTANT_Class_info类型常量,其中0<=i<interfaces_count。在interface数据表中。成员表示的接口顺序和对应的源代码中给定的接口顺序(从左至右)一样,即interfaces【0】对应的是源代码中最左边定义的接口。

对比:

类索引父类索引接口索引
u2u2一组u2集合
确定类的全限定名确定父类的全限定名接口名字索引

字段元数据


字段表集合的组成部分与接口相似,也主要包含计数器和数据表、若干索引项,其中字段计数器存储相关的字段的数量;字段数据表记录类或接口中的所有字段,包括实例字段(没有用static修饰)和静态字段(static修饰),但不包括父类或父接口定义的字段与方法中声明的局部变量。

每一个字段表只表示一个成员变量,本类中的所有成员变量构成了字段表集合。字段表结构如下:

类型名称数量说明
u2access_flags1字段的访问标识,与类稍有不同
u2name_index1字段名称索引项
u2descriptor_index1字段描述符索引项,用于描述字段的数据类型。 基本数据类型用大写字母表示; 对象类型用“L 对象类型的全限定名”表示
u2attributes_count1字段表计数器(属性表集合的长度)
attribute_infoattributesattributes_count字段表(属性表集合,用于存放属性的额外信息,如属性的值。)

字段访问权限值如下:

标志值说明
ACC_PUBLIC0x0001public,包外可访问
ACC_PRIVATE0x0002private,只可在类内访问
ACC_PROTECTED0x0004protected,类内和子类中可访问
ACC_STATIC0x0008static,静态
ACC_FINAL0x0010final,常量
ACC_VOLATILE0x0040volatile,直接读写内存,不可被缓存,不可和ACC_FINAL 一起使用
ACC_TRANSIENT0x0080tramsient,在序列化中被忽略的字段
ACC_SYNTHETIC0x1000synthetic,由编译器产生,不存在于源代码中
ACC_ENUM0x4000enum,枚举类型字段

注意:接口中的字段必须同时设置ACC_PUBLIC 、ACC_STATIC、ACC_FINAL。

方法元数据


方法表结构与字段表类似。

volatile 关键字 和 transient 关键字不能修饰方法,所以方法表的访问标志中没有 ACC_VOLATILE 和 ACC_TRANSIENT 标志。

方法表的属性表集合中有一张 Code 属性表,用于存储当前方法经编译器编译后的字节码指令。

属性元数据


在字段表、方法表中可以携带自己的属性表集合,用来描述某些场景专有信息。属性表的格式相对固定,包含三部分:一个u2的attribute_name_index,指向常量池中的一个UTF-8字符串常量,表示一个属性名称;一个u2的数据类型表示attribute_length,表示该属性值的字节长度,结构表如下:

类型名称数量含义
u2attribute_length1属性长度
u2attribute_name_index1属性方法下标
attribute_infoattributesattribute_count属性信息表

属性信息表如下:

属性名称使用位置说明
Code方法表被编译成字节码的指令
ConstantValue字段表final关键字定义的常量值
Deprecated类、方法表、字段表声明deprecated的方法和字段
Exceptions方法表方法抛出异常
InnerClasses类文件内部类列表

在这里插入图片描述

  如果喜欢的话,欢迎 🤞关注 👍点赞 💬评论 🤝收藏  🙌一起讨论你的支持就是我✍️创作的动力!					  💞💞💞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/200070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python----Pandas

目录 Series属性 DataFrame的属性 Pandas的CSV文件 Pandas数据处理 Pandas的主要数据结构是Series&#xff08;一维数据&#xff09;与DataFrame&#xff08;二维数据&#xff09; Series属性 Series的属性如下&#xff1a; 属性描述pandas.Series(data,index,dtype,nam…

mybatis 的快速入门以及基于spring boot整合mybatis

MyBatis基础 MyBatis是一款非常优秀的持久层框架&#xff0c;用于简化JDBC的开发 准备工作&#xff1a; 1&#xff0c;创建sprong boot工程&#xff0c;引入mybatis相关依赖2&#xff0c;准备数据库表User&#xff0c;实体类User3&#xff0c; 配置MyBatis&#xff08;在applic…

2005-2021年地级市绿色发展注意力数据(根据政府报告文本词频统计)

2005-2021年地级市绿色发展注意力数据&#xff08;根据政府报告文本词频统计&#xff09; 1、时间&#xff1a;2005-2021年 2、指标&#xff1a;省、市、年份、一级指标、关键词、关键词词频、总词频 3、范围&#xff1a;270个地级市 4、来源&#xff1a;地级市政府工作报告…

【C++】动态内存管理——new和delete

这篇文章我们讲一下C的动态内存管理&#xff0c;从一个比较陌生的知识说起&#xff0c;我们知道&#xff0c;一个工程可以创建很多.c文件&#xff0c;我们如果定义一个全局变量&#xff0c;只要用extern声明一下&#xff0c;在每个文件都可以用。而用static修饰的全局变量只能在…

【ecology】通过F12抓取页面SQL

1、点击流程监控&#xff0c;打开浏览器的”开发者工具“&#xff08;F12&#xff09;&#xff1b; 2、点击搜索&#xff0c;在开发者工具中找到sessionkey&#xff0c;复制后面的值。 3、http://58.213.83.186:8081/api/ec/dev/table/getxml?dataKey 上面的网址的IP地址修改…

Gee教程6.模板(HTML Template)

这一章节的内容是介绍 Web 框架如何支持服务端渲染的场景 实现静态资源服务(Static Resource)。支持HTML模板渲染。 这一章节很多内容是基于net/http库的&#xff0c;该库已经实现了很多静态文件和HMML模板的相关功能的了。 静态文件 网页的三剑客&#xff0c;JavaScript、C…

看懂lscpu的输出

文章目录 1. lscpu1.1 Architecture1.2 逻辑核心数1.3 缓存1.4 CPU型号1.5 NUMA架构1.5.1 CPU多核架构1.5.2 多CPU Socket架构 2. cat /proc/cpuinfo2.1 关键字段 1. lscpu 通过lscpu查看当前系统的CPU信息。 [hadoopserver3 ~]$ lscpuArchitecture: x86_64 …

「词令」2023年12月6日蚂蚁庄园今日问题答案是什么?支付宝蚂蚁庄园今日答案12.6

问题&#xff1a;千页豆腐的主要原料是豆腐吗&#xff1f; 选项&#xff1a;A、不是哦 B、当然是 答案&#xff1a;不是哦 解析&#xff1a;千页豆腐是素食新产品&#xff0c;以大豆分离蛋白和水为主要原料&#xff0c;食用植物油、淀粉等为辅料;添加或不添加稳定剂和凝固剂…

java--接口的其他细节

1.jdk8开始&#xff0c;接口新增了三种形式的方法 ①默认方法(实例方法)&#xff1a;使用用default修饰&#xff0c;默认会被加上public修饰。注意&#xff1a;只能使用接口的实现类对象调用 ②私有方法&#xff1a;必须用private修饰(jdk9开始才支持) ③类方法(静态方法)&a…

234 回文链表

解题思路&#xff1a; \qquad 由于链表的结构特点&#xff0c;访问链表中的元素的时间复杂度为O(n)。相比较而言&#xff0c;使用数组会方便很多&#xff0c;实现O(1)访问。 \qquad 所以这个题&#xff0c;可以先遍历一遍把数值存到数组中&#xff0c;再使用双指针判断是否是…

openlayers地图使用---跟随地图比例尺动态标绘大小的一种方式

openlayers地图使用—跟随地图比例尺动态标绘大小的一种方式 预期&#xff1a;随着地图比例尺放大缩小&#xff0c;地图上的标绘随着变化尺寸 结果图 页面元素 <script src"https://cdn.bootcdn.net/ajax/libs/openlayers/8.1.0/dist/ol.min.js"></script…

7_企业架构MySQL读写分离

企业架构MySQL读写分离 学习目标和内容 1、能够理解读写分离的目的 2、能够描述读写分离的常见实现方式 3、能够通过项目框架配置文件实现读写分离 4、能够通过中间件实现读写分离 一、背景描述及其方案设计 1、业务背景描述 时间&#xff1a;2014.6.-2015.9 发布产品类型&…

AntDesignBlazor示例——创建项目

本示例是AntDesign Blazor的入门示例&#xff0c;在学习的同时分享出来&#xff0c;以供新手参考。 示例代码仓库&#xff1a;https://gitee.com/known/AntDesignDemo 1. 开发环境 VS2022 17.8.2.NET8AntDesign 0.16.2 2. 学习目标 创建新项目安装AntDesign组件包及使用方…

不知道如何制作电商产品说明书?推荐一个很好的方法!

作为一名电商从业者&#xff0c;你可能会经常面临一个问题&#xff1a;如何制作一份详细且吸引人的产品说明书&#xff1f;这的确是一个棘手的问题&#xff0c;因为产品说明书不仅要准确地描述产品的特点和功能&#xff0c;还要能够吸引潜在客户的注意。 一、电商网站制作产品说…

基于轻量级模型GHoshNet开发构建眼球眼疾识别分析系统,构建全方位多层次参数对比分析实验

工作中经常会使用到轻量级的网络模型来进行开发&#xff0c;所以平时也会常常留意使用和记录&#xff0c;在前面的博文中有过很多相关的实践工作&#xff0c;感兴趣的话可以自行移步阅读即可。 《移动端轻量级模型开发谁更胜一筹&#xff0c;efficientnet、mobilenetv2、mobil…

06、pytest将多个测试放在一个类中

官方用例 # content of test_class.py # 实例1 class TestClass:def test_one(self):x "this"assert "h" in xdef test_two(self):x "hello"assert hasattr(x,"check")# content of test_class_demo.py # 每个测试都有唯一的类实例…

CopyOnWriteArrayList怎么用

什么是CopyOnWriteArrayListCopyOnWriteArrayList常用方法CopyOnWriteArrayList源码详解CopyOnWriteArrayList使用注意点CopyOnWriteArrayList存在的性能问题CopyOnWriteArrayList 使用实例基本应用实例并发应用实例 拓展写时复制 什么是CopyOnWriteArrayList CopyOnWriteArra…

企业网络安全守护者:EventLog Analyzer日志审计系统

在当今数字时代&#xff0c;企业网络不仅仅是业务运营的核心&#xff0c;也成为各种潜在威胁的目标。为了保障企业的网络安全&#xff0c;日志审计系统成为了不可或缺的一环。其中&#xff0c;ManageEngine的EventLog Analyzer作为一款强大而全面的日志管理与审计解决方案&…

【第三方】微信登录

目录 前言小程序登录步骤说明前端效果涉及到的接口登录凭证&#xff1a;wx.login获取用户信息&#xff1a;wx.getUserInfo 后端涉及到接口小程序登录 代码展示 微信扫码登录 前言 微信官方文档&#xff0c;需要对接哪个模块就从哪里进入。 由于本次我们需要的是小程序的登录。…

有趣的代码——有故事背景的程序设计3

这篇文章再和大家分享一些有“背景”的程序设计&#xff0c;希望能够让大家学到知识的同时&#xff0c;对编程学习更感兴趣&#xff0c;更能在这条路上坚定地走下去。 目录 1.幻方问题 2.用函数打印九九乘法表 3.鸡兔同笼问题 4.字数统计 5.简单选择排序 1.幻方问题 幻方又…