Java类文件.class详解

一、编译型语言和解释型语言的区别

1、编译型语言:

在编译型语言中,源代码会被整个编译成机器码或者中间代码(比如Java的字节码),生成可执行文件。
运行程序时,不需要再对源代码进行解释,而是直接执行生成的可执行文件。
典型的编译型语言包括C、C++等,它们在执行时需要依赖特定平台的编译结果。

2、解释型语言:

解释型语言的源代码在运行时会逐行或逐段被解释器解释执行,而不是提前编译成可执行文件。
解释型语言的执行速度通常比编译型语言慢,因为每次执行都需要解释器实时解释源代码。
典型的解释型语言包括Python、JavaScript等,它们不需要生成可执行文件,而是直接在解释器中运行源代码。

3、Java 程序从源代码到运行的过程:

在这里插入图片描述

  • 所以说Java是解释和编译共存的一种语言。因为 Java 程序要经过先编译,后解释两个步骤,由 Java 编写的程序需要先经过编译步骤,生成字节码(.class 文件),这种字节码必须由 Java 解释器来解释执行。
  • 在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。
  • 在Java中,JIT编译器是Java虚拟机的重要组成部分,负责将Java字节码转换成本地机器码,以便在特定平台上执行。在保持Java跨平台特性的同时,通过动态编译提高了程序的执行性能(JIT编译器在程序运行时动态生成本地机器码)。JIT编译器JIT编译器通常会使用各种优化技术,如方法内联、循环展开、常量传播等,以提高生成的机器码的效率和性能。支持动态特性是AOT不具有的。

二、class 文件的组成。

根据 Java 虚拟机规范,Class 文件通过 ClassFile 定义,ClassFile 的结构如下:

ClassFile {u4             magic; //Class 文件的标志u2             minor_version;//Class 的小版本号u2             major_version;//Class 的大版本号u2             constant_pool_count;//常量池的数量cp_info        constant_pool[constant_pool_count-1];//常量池u2             access_flags;//Class 的访问标记u2             this_class;//当前类u2             super_class;//父类u2             interfaces_count;//接口数量u2             interfaces[interfaces_count];//一个类可以实现多个接口u2             fields_count;//字段数量field_info     fields[fields_count];//一个类可以有多个字段u2             methods_count;//方法数量method_info    methods[methods_count];//一个类可以有个多个方法u2             attributes_count;//此类的属性表中的属性数attribute_info attributes[attributes_count];//属性表集合
}
  1. 魔数(Magic Number):
    .class文件的头四个字节是固定的魔数,用于识别文件是否为有效的Java类文件。通常情况下,这四个字节的数值为0xCAFEBABE。
   u4             magic; //Class 文件的标志
  1. 版本号(Version):
    魔数之后的四个字节表示.class文件的版本号,包括主版本号和次版本号。主版本号表示Java编译器的版本,次版本号表示编译器的次要版本。
    u2             minor_version;//Class 的小版本号u2             major_version;//Class 的大版本号
  1. 常量池(Constant Pool):
    常量池是.class文件中一个重要的部分,用于存储编译后的字节码中所用到的符号引用、字面量等信息。常量池中的内容包括类名、方法名、字段名、字符串常量等。
    u2             constant_pool_count;//常量池的数量cp_info        constant_pool[constant_pool_count-1];//常量池
  1. 访问标志(Access Flags):
    访问标志指示了该类或接口的访问权限,比如public、private、protected等。
    u2             access_flags;//Class 的访问标记
  1. 类信息:
    包括类的名称、父类的名称、实现的接口等信息。
    u2             this_class;//当前类u2             super_class;//父类u2             interfaces_count;//接口数量u2             interfaces[interfaces_count];//一个类可以实现多个接口
  1. 字段信息:
    描述了类中的字段,包括字段名称、字段类型、访问标志等。
    u2             fields_count;//字段数量field_info     fields[fields_count];//一个类可以有多个字段
  1. 方法信息:
    描述了类中的方法,包括方法名称、参数列表、返回值类型、访问标志等。
    u2             methods_count;//方法数量method_info    methods[methods_count];//一个类可以有个多个方法
  1. 属性表集合(Attributes):
    u2             attributes_count;//此类的属性表中的属性数attribute_info attributes[attributes_count];//属性表集合

每个类、字段或方法都可以包含一些属性信息,比如源文件名、行号表、局部变量表等。
以上是.class文件的主要组成部分,它们共同构成了Java编译后的二进制表示形式,被Java虚拟机加载和执行。

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

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

相关文章

vue3怎么使用i18n

在 Vue 3 中使用国际化(i18n)通常涉及到使用 Vue I18n Next,这是 Vue 3 的官方国际化插件。以下是如何设置和使用 Vue I18n Next 的步骤: 1. 安装 Vue I18n Next 使用 npm 或 yarn 安装 Vue I18n Next: npm install …

Yarn的安装及使用

YARN的安装及使用主要分为以下几个步骤: 一、安装YARN YARN的安装依赖于Node.js的运行环境,因此需要先安装Node.js。 下载并安装Node.js:可以从Node.js官网下载并安装适合你操作系统的Node.js安装包。安装YARN: 在Windows系统…

RockChip Android13 NFC SL6320移植

环境:RK3568 Android13 一:驱动移植 1、驱动 将SL6320驱动代码拷贝至kernel-5.10/drivers/misc/sl6320/ 特殊说明:勿将驱动代码放置于kernel-5.10/drivers/nfc/目录下,会导致sl6320驱动生成设备节点时因/dev/nfc节点以创建而加载失败。 2、DTS 本次硬件设计电路走I2C协…

服务器数据恢复—多块磁盘离线导致阵列瘫痪,上层lun不可用的数据恢复案例

服务器存储数据恢复环境: 某品牌MSA2000存储,该存储中有一组由8块SAS硬盘(其中有一块热备盘)组建的RAID5阵列,raid5阵列上层划分了6个lun,均分配给HP-Unix小型机使用,主要数据为oracle数据库和O…

【LeetCode刷题】34. 在排序数组中查找元素的第一个和最后一个位置

1. 题目链接 34. 在排序数组中查找元素的第一个和最后一个位置 2. 题目描述 3. 解题方法 找到元素的第一个位置,也就是找大于等于目标的最小值找到元素的最后一个位置,也就是找小于等于目标的最大值可以利用2次二分查找来解决 3.1. 第一次查找 3.2. …

今日详解,教你如何不直播在视频号卖货

大家好,我是电商笨笨熊 视频号作为背靠微信的平台,从不需要考虑自身的流量问题, 因此在视频号推出之后就有大批的主播从其他平台转入视频号; 而这时候很多普通人应该也发现了新的机会,不再去内卷抖音、快手直播&…

【Git】Github创建远程仓库并与本地互联

创建仓库 点击生成新的仓库 创建成功后会生成一个这样的文件 拉取到本地 首先先确保本地安装了git 可以通过终端使用 git --version来查看是否安装好了git 如果显示了版本信息,说明已经安装好了git,这时候我们就可以进入我们想要clone到问目标文件夹 …

【MySQL】4.MySQL的InnoDB引擎深度解析:事务、索引、MVCC、锁机制与性能优化等

InnoDB,作为MySQL数据库系统中的默认存储引擎,以其卓越的事务处理能力和对ACID属性的全面支持,成为了众多开发者和数据库管理员的首选。然而,要充分利用InnoDB的强大功能,就需要深入理解其内部机制,包括事务…

介绍一下std::thread

std::thread 是 C11 标准库中的一个类,它用于表示和控制线程的执行。通过 std::thread,你可以创建和管理多个并发执行的线程,这些线程可以共享应用程序的资源,并执行不同的任务。 创建线程 std::thread 的构造函数用于创建线程。…

C++深入解析锁机制与 CAS 实现

锁机制 在锁机制的应用中,乐观锁和悲观锁是两种常见的并发控制策略,它们主要在处理数据的一致性和并发操作时表现出不同的假设和实现方式。 乐观锁 乐观锁基于这样一个假设:冲突发生的概率很低,因此在数据操作过程中不会主动去…

python-正则表达试-实践1

匹配html标签中的任意标签内数据 匹配所有包含’oo’的单词 import re text "JGood is a handsome boy, he is cool, clever, and so on..." re.findall(r\w*oo\w*, text) 匹配 html中title里面的内容 原文: import re file r./202304.html f open(…

2023数维杯A题原创完整论文思路和求解代码

河流对地下水有着直接地影响,当河流补给地下水时,河流一旦被污染,容易导致地下水以及紧依河流分布的傍河水源地将受到不同程度的污染,这将严重影响工农业的正常运作、社会经济的发展和饮水安全。在地下水污染中最难治理和危害最大的是有机污染,因而对有机污染物在河流-地下…

WordPress Automatic插件 SQL注入漏洞复现(CVE-2024-27956)

0x01 产品简介 WordPress Automatic(又称为WP Automatic)是一款流行的WordPress插件,旨在帮助网站管理员自动化内容创建和发布。该插件可以从各种来源(如RSS Feeds、社交媒体、视频网站、新闻网站等)获取内容,并将其自动发布到WordPress网站。 0x02 漏洞概述 WordPres…

springboot使用研究

map-underscore-to-camel-case: true 开启驼峰命名 @GetMapping("/userInfo")public Result<Users> userInfo(@RequestHeader(name = "Authorization") String token,HttpServletResponse response) {Map<String, Object> map = JwtUtil.pa…

error: Execution was interrupted, reason: signal SIGABRT

c json解析时&#xff0c; error: Execution was interrupted, reason: signal SIGABRT const Json::Value points root["shapes"]; if (points.isArray()) { for (unsigned int i 0; i < points.size(); i) { std::cout << " - [" <<…

从论文中看AI绘画

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 主要看是看Diffusion Models,CLIP,ControlNet,IP-Adapter这种经典论文,尝试总结论文写作的一些方式以及图像生成模型的一些内在思想. 对于其中的数学原理和代码不过深究. DDPM 使用扩散模型得到高质量图像,证明了这…

“给力”用日语怎么说?柯桥成人日语培训

在日语中,给力这个词可以翻译成几个不同的表达方式,具体取决于语境。以下我将给出几个常见的日语翻译以及例句帮助理解: スゴイ 这个词意思为“太棒了”,是表达给力的最常见说法。 例如: これはスゴイ映画だね。这电影太给力了! 最高 意思为“最棒的”,也可以用来表达给力。 例…

QT图片图标更改后不加载问题处理

QT通过setPixmap、setIcon、setMovie等方法&#xff0c;设置图片、图标时&#xff0c;会更新图片、图标函数执行&#xff0c;但是图片图标并没有更改的情况。 尝试通过信号槽方式去设置图片&#xff0c;仍然不能响应更改&#xff0c;以下提供一个可行的解决方法。 在setPixma…

连锁店收银系统为什么贵

连锁店收银系统会比单机收银系统价格高一些&#xff0c;主要有三个方面的原因&#xff1a; 复杂的功能需求 连锁店收银系统需要管理多个分店的进销存、库存调拨、门店订货等操作&#xff0c;以及会员管理&#xff0c;商淘云连锁收银系统还提供了连锁线上商城等功能。这些功能的…

“胖猫”事件

1.她自以为手段高明&#xff0c;不过是他心甘情愿罢了。 2. 可惜他在最后一刻&#xff0c;也没怨恨过她。 3.她反复确定用不用还&#xff0c;他反复确定有没有爱。 4. 他才21岁&#xff0c;只想见你一面&#xff0c;有什么错。 5. 希望你学会爱的时候&#xff0c;爱的第一个人是…