高级java每日一道面试题-2024年11月06日-JVM篇-什么是 Class 文件? Class 文件主要的信息结构有哪些?

如果有遗漏,评论区告诉我进行补充

面试官: 什么是 Class 文件? Class 文件主要的信息结构有哪些?

我回答:

在 Java 中,.class 文件是一种二进制文件,包含了编译后的 Java 类或接口的信息。Java 源代码(.java 文件)经过 Java 编译器(javac)编译后,生成的就是 .class 文件。这些文件是 Java 虚拟机(JVM)执行的基础,JVM 通过解释或即时编译(JIT 编译)这些字节码来执行程序。

Class 文件的主要信息结构

Class 文件遵循一种严格定义的格式,称为 Class 文件格式。这种格式是跨平台的,确保了 Java 的“一次编写,到处运行”的特性。下面详细介绍 Class 文件的主要信息结构:

1. 魔数(Magic Number)
  • 文件开始的4个字节的无符号整数称为魔数,其值为0xCAFEBABE(十六进制表示)。
  • 魔数的唯一作用是确定这个文件是否为一个能被Java虚拟机接受的有效合法的Class文件。
2. 版本号(Version Information)
  • 次要版本号(Minor Version):接下来的 ⅔ 个字节表示 Class 文件的次要版本号。
  • 主要版本号(Major Version):接下来的 ⅔ 个字节表示 Class 文件的主要版本号。
    • 例如,52.0 表示 Java 8,53.0 表示 Java 9,55.˜ 表示 Java 11。
3. 常量池(Constant Pool)
  • 常量池计数:紧接着版本号的是一个 2 字节的常量池计数,表示常量池中有多少个常量。
  • 常量池:常量池是 Class 文件中最重要的部分之一,包含了类或接口中使用的所有常量信息,如字符串、类和接口名、字段名和方法名等。
    • 常量池中的每个条目都有一个类型标签,指示条目的类型(如 CONSTANT_Utf8_infoCONSTANT_Class_infoCONSTANT_Fieldref_info 等)。
  • 常量池是Class文件结构中与其他项目关联最多的数据,也是占用Class文件空间最大的数据项目之一。
  • 常量池主要存放两大类常量:字面量(Literal)和符号引用(Symbolic References)。字面量比较接近于Java语言层面的常量概念,如文本字符串、被声明为final的常量值等。符号引用则属于编译原理方面的概念,主要包括类和接口的全限定名、字段的名称和描述符、方法的名称和描述符等。
4. 访问标志(Access Flags)
  • 访问标志:接下来是 2 字节的访问标志,表示类或接口的访问控制信息,如是否是公共的、抽象的、最终的等。
  • 访问标志占2个字节,用于识别一些类或接口层次的访问信息,如这个Class是类还是接口、是否定义为public类型、是否定义为abstract类型等。
5. 类索引和父类索引(This Class and Super Class Indices)
  • 类索引(This Class):接下来是 2 字节的类索引,指向常量池中的一个 CONSTANT_Class_info 项,表示当前类的全限定名。
  • 父类索引(Super Class):接下来是 2 字节的父类索引,指向常量池中的一个 CONSTANT_Class_info 项,表示当前类的直接父类的全限定名。如果当前类是 Object,则父类索引为 0。
  • 类索引用于确定这个类的全限定名。
  • 父类索引用于确定这个类的父类的全限定名。由于Java语言不允许多重继承,所以父类索引只有一个。除了java.lang.Object之外,所有的Java类都有父类,因此除了java.lang.Object外,所有Java类的父类索引都不为0。
  • 接口索引集合用于描述这个类实现了哪些接口。这些被实现的接口将按implements关键字(如果这个Class文件表示的是一个接口,则应当是extends关键字)后的接口顺序从左到右排列在接口索引集合中。
6. 接口索引集合(Interfaces)
  • 接口计数:接下来是 2 字节的接口计数,表示当前类或接口实现了多少个接口。
  • 接口索引:接下来是若干个 2 字节的接口索引,每个索引指向常量池中的一个 CONSTANT_Class_info 项,表示一个接口的全限定名。
7. 字段表集合(Fields)
  • 字段计数:接下来是 2 字节的字段计数,表示类或接口中定义了多少个字段。
  • 字段表:接下来是若干个字段表,每个字段表描述了一个字段的信息,包括访问标志、名称索引和描述符索引等。
8. 方法表集合(Methods)
  • 方法计数:接下来是 2 字节的方法计数,表示类或接口中定义了多少个方法。
  • 方法表:接下来是若干个方法表,每个方法表描述了一个方法的信息,包括访问标志、名称索引和描述符索引等。方法表中还可能包含属性表,用于描述方法的代码、异常表等信息。
  • 字段表集合用于描述接口或类中声明的变量(不包括在方法内部声明的局部变量)。字段表包括字段名、类型、访问修饰符等信息。
9. 属性表集合(Attributes)
  • 属性计数:接下来是 2 字节的属性计数,表示类或接口中定义了多少个属性。
  • 属性表:接下来是若干个属性表,每个属性表描述了一个属性的信息。常见的属性包括 Code(方法的字节码)、LineNumberTable(行号表)、LocalVariableTable(局部变量表)等。
  • 属性表可以出现在类文件、字段表和方法表的任何位置。它们用于存储一些附加信息,如类的源代码行号、异常表、局部变量表等。属性表集合的限制稍微宽松一些,不再要求各个属性表具有严格顺序。

总结

Class 文件是 Java 编译后的二进制文件,包含了类或接口的所有必要信息。其结构包括魔数、版本号、常量池、访问标志、类索引和父类索引、接口索引集合、字段表集合、方法表集合和属性表集合。理解 Class 文件的结构对于深入理解 Java 的编译和执行机制非常重要,在高级 Java 面试中也是一个常见的话题。

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

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

相关文章

卷积、频域乘积和矩阵向量乘积三种形式之间的等价关系与转换

线性移不变系统 线性移不变系统(Linear Time-Invariant System, LTI系统)同时满足线性和时不变性两个条件。 线性:如果输入信号的加权和通过系统后,输出是这些输入信号单独通过系统后的输出的相同加权和,那么该系统就…

一文窥见神经网络

一文窥见神经网络 1.初识神经元1.1 生物神经元1.2 人工神经元1.3 权重的作用1.4 偏置的作用1.5 激活函数的作用1.5.1 线性激活函数1.5.2 非线性激活函数 2. 神经元模型2.1 多输入单神经元模型2.2 一层神经元模型2.3 神经网络(多层神经元)模型 3. 神经网络…

DBeaver 连接 OceanBase Oracle 租户

DBeaver 是一款通用的数据库工具软件,支持任何具有JDBC驱动程序的数据库。DBeaver 需要 Java 运行环境的支持。截稿时 DBeaver 24.0.0 版本默认提供的 OceanBase 驱动是连接 MySQL 的,想连接 Oracle 租户需要新建一个驱动器使用。 下载数据库驱动包 1、…

web实操5——http数据详解,request对象功能

http请求数据 现在我们浏览器f12的那些是浏览器给http格式数据整理之后便于我们阅读的。 原始的http格式信息: 就是按照一定格式和符号的字符串: 请求行:格式如下图 请求头:一个个key,value数据,用,分割…

u盘加密软件有哪些?2025年必备的u盘加密神器分享(共6款!提前布局!)

2024年《数据泄露成本报告》最新出炉!再破纪录! 报告显示,全球数据泄露事件的平均成本达488万美元,同比增加10%。 其中,u盘最为数据存储和传输的常用媒介,对其进行加密早已箭在弦上! 在2025年…

实验5:网络设备发现、管理和维护

实验5:网络设备发现、管理和维护 实验目的及要求: 通过实验,掌握Cisco 路由器和交换机的IOS配置管理。自动从NTP服务器获取时间信息。能够利用TFTP服务器实现路由器和交换机配置文件的备份和恢复。同时验证CDP协议和LLDP协议的网络参数。完…

基于java的航空机票预定管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

排序算法 -快速排序

文章目录 1. 快速排序(Quick Sort)1.1、 简介1.2、 快速排序的步骤 2. Hoare 版本2.1、 基本思路1. 分区(Partition)2. 基准选择(Pivot Selection)3. 递归排序(Recursive Sorting) 2…

UAC2.0 speaker——同时支持 16bit,24bit 和 32bit

文章目录 同时支持 16bit,24bit 和 32bit配置描述符集合描述符结构位数切换16bit 选择24bit 选择32bit 选择枚举效果同时支持 16bit,24bit 和 32bit 在一个 USB speaker 设备中同时支持 16bit, 24bit 和 32bit。 配置描述符集合 09 02 E9 00 02 01 00 80 32 08 0B 00 02

conda创建 、查看、 激活、删除 python 虚拟环境

1、创建 python 虚拟环境 ,假设该环境命名为 “name”。 conda create -n name python3.11 2、查看 python 虚拟环境。 conda info -e 3、激活使用 python 虚拟环境。 conda activate name 4、删除 python 虚拟环境 conda remove -n name --all ​​ 助力快速掌握数据集…

三周精通FastAPI:37 包含 WSGI - Flask,Django,Pyramid 以及其它

官方文档:https://fastapi.tiangolo.com/zh/advanced/wsgi/ 包含 WSGI - Flask,Django,其它 您可以挂载多个 WSGI 应用,正如您在 Sub Applications - Mounts, Behind a Proxy 中所看到的那样。 为此, 您可以使用 WSGIMiddlewar…

微服务即时通讯系统的实现(客户端)----(1)

目录 1. 项目整体介绍1.1 项目概况1.2 界面预览和功能介绍1.3 技术重点和服务器架构 2. 项目环境搭建2.1 安装Qt62.3 安装vcpkg2.3 安装protobuf2.4 构建项目2.5 配置CMake属性 3. 项目核心数据结构的实现3.1 创建data.h存放核心的类3.2 工具函数的实现3.3 创建编译开关 4. 界面…

MyBatis——增删查改(XML 方式)

1. 查询 1.1. 简单查询 使用注解的方式主要是完成一些简单的增删查改功能,如果要实现复杂的 SQL 功能,还是建议使用 XML 来配置映射语句,将 SQL 语句写在 XML 配置文件中 如果要操作数据库,需要做以下的配置,与注解…

A029-基于Spring Boot的物流管理系统的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

华为路由策略配置

一、AS_Path过滤 要求: AR1与AR2、AR2与AR3之间建立EBGP连接 AS10的设备和AS30的设备无法相互通信 1.启动设备 2.配置IP地址 3.配置路由器的EBGP对等体连接,引入直连路由 [AR1]bgp 10 [AR1-bgp]router-id 1.1.1.1 [AR1-bgp]peer 200.1.2.2 as-nu…

如何向函数模块 FM 中传递 Range 参数

有时候需要在选择屏幕之后调用一个函数模块,那么如果利用 SE37 在函数模块定义 Range 参数呢。 解决方法很简单,系统有很多预定义的 Range_* 类型: 如上图,这里有很常用的 Range 结构,如订单号、发票号、公司代码等等…

工作和学习遇到的技术问题

写在前面 记录工作和学习遇到的技术问题,以求再次遇到可以快速解决。 1:Ubuntu TSL换源报错:Err:1 http://mirrors.aliyun.com/ubuntu focal InRelease 执行如下操作(已经操作的则忽略),首先在文件/etc/apt/sources…

研究生如何远控实验室电脑?远程办公功能使用教程

如果你是研究生,是不是会遇到需要远程控制实验室电脑进行查看文献、调代码和拉数据的时候?有时候就是这么棘手,不过你可以借助一些工具来帮助你随时随地远控实验室电脑。这样就不用担心导师催促,无法及时完成科研了。常见的工具比…

重卡穿越商都,ROG DAY 2024郑州站高燃来袭

野塘菡萏正新秋,红藕香中过郑州!2024年11月9日~10日,ROG DAY 2024信仰集结的号角正式吹响,首战据点落地郑州局外太格茂。炫酷涂装的战车如同未来战士般震撼登陆,ROG硬核科技闪耀亮相,现场氛围瞬间点燃!活动现场人流不息,年轻学子、数码爱好者、极客玩家、科技博主以及周末悠闲惬…

web安全测试渗透案例知识点总结(上)——小白入狱

目录 一、Web安全渗透测试概念详解1. Web安全与渗透测试2. Web安全的主要攻击面与漏洞类型3. 渗透测试的基本流程 二、知识点详细总结1. 常见Web漏洞分析2. 渗透测试常用工具及其功能 三、具体案例教程案例1:SQL注入漏洞利用教程案例2:跨站脚本&#xff…