如何查看 class 文件的编译器版本

news2024/11/18 3:41:34

文章目录

    • 原理分析
    • 解决方案
    • 其它解决方案
      • javap 命令行工具

在平时的 Java 开发中,有时候我们需要知道某个 class 文件是由哪个版本的 Java 编译器编译生成的

原理分析

class 文件,即字节码文件,它有特定的二进制格式,这种格式是由 JVM 规范规定的,不受特定硬件或操作系统的影响。
字节码文件的二进制格式主要有如下部分:

  1. magic number(魔数):开头4个字节,始终为 CAFE BABE
  2. version(版本号):接下来4个字节表示 Java 的版本。其中,前2个字节是 minor version(次版本号),后2个字节是 major version(主版本号);

所以,可以通过查看 class 文件的 major version 来确定其对应的编译器版本。

解决方案

实际上,任何可以查看二进制格式文件的软件(文本编辑器等),都可以帮助我们确定 class 文件对应的 Java 编译器版本。这里抛砖引玉,借助 Visual Studio Code 的一款叫 Hex Editor 的插件来确定。

打开 Visual Studio Code,点击“插件”图标,搜索并安装插件 Hex Editor
Visual Studio Code 搜索插件 Hex Editor
Hex Editor

使用 Hex Editor 打开对应的 class 文件,查看文件第一行的索引号为 06 及 07 这两个字节(这里为 00 32),得到对应的 major version
App.class

然后通过 Java 版本对照表,即可知道 class 文件是由哪个版本的 Java 编译器编译生成的了(比如上面示例的 class 文件对应编译器版本为 JDK 6)

Java JDKmajor version(十进制)major version(十六进制)
18620x3e
17610x3d
16600x3c
15590x3b
14580x3a
13570x39
12560x38
11550x37
10540x36
9530x35
8520x34
7510x33
6500x32
5490x31
1.4480x30
1.3470x2f
1.2460x2e
1.1450x2d

其它解决方案

javap 命令行工具

javap,Java class file disassembler,Java 类文件反汇编器,它是 JDK 附带的一个命令行工具,用于反编译和显示 Java 字节码文件的详细信息,通过该工具也可以确定 class 文件对应的 Java 编译器版本。

javap -verbose App.class

javap -verbose

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

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

相关文章

『力扣刷题本』:环形链表(判断链表是否有环)

一、题目 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&am…

接口调用微信公众号群发功能,绕过微信自身限制

微信群发功能要求要微信认证。微信认证要求要企业账号、而且需要认证费用。 本篇文章教大家非微信认证账号如何群发公众号信息 本篇文章基于python语言开发,其他的语言一样的方式,不需要拘泥于语言 注意事项: 要求有微信公众平台登陆状态,也就是Cookie数据, 如何通过Py…

统信UOS通过源码安装软件提示“configure: error: cannot run C compiled programs.”错误

1. 问题说明 使用源码的方式安装git软件,安装过程中出现两个错误。 编译错误“cannot run C compiled programs” XC:~/Downloads/git-2.42.1$ ./configure --prefix/home/software/git-2.42.1 configure: Setting lib to lib (the default) configure: Will try…

消息消费过程

前言 本文介绍下Kafka消费过程, 内容涉及消费与消费组, 主题与分区, 位移提交,分区再平衡和消费者拦截器等内容。 消费者与消费组 Kafka将消费者组织为消费组, 消息只会被投递给消费组中的1个消费者。因此, 从不同消费组中的消费者来看, Kafka是多播(Pub/Sub)模式…

腾讯云服务器公网带宽速度怎么样?上传下载实测!

腾讯云服务器公网带宽下载速度计算,1M公网带宽下载速度是128KB/秒,5M带宽下载速度是512KB/s,腾讯云10M带宽下载速度是1.25M/秒,腾讯云百科txybk.com来详细说下腾讯云服务器不同公网带宽实际下载速度以及对应的上传速度对照表&…

二十九、W5100S/W5500+RP2040树莓派Pico<Web socket Server>

文章目录 1 前言2 简介2 .1 什么是WebSocket协议?2.2 WebSocket协议工作原理2.3 WebSocket协议优点2.4 WebSocket应用场景 3 WIZnet以太网芯片4 WebSocket示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接…

鸿蒙:Harmony开发基础知识详解

一.概述 工欲善其事,必先利其器。 上一篇博文实现了一个"Hello Harmony"的Demo,今天这篇博文就以Demo "Hello Harmony" 为例,以官网开发文档为依据,从鸿蒙开发主要的几个方面入手,详细了解一下鸿…

macOS 后台项目已添加 “Google Updater添加了可在后台运行的项目。你可以在“登陆项”设置中管理

文章目录 Intro解决查看三个文件夹分析 & 操作确认结果是否生效 Intro 我的macbook上经常弹出这样的通知狂: macOS 后台项目已添加 “Google Updater添加了可在后台运行的项目。你可以在“登陆项”设置中管理 不胜其扰,终于决定禁用它。以下为方法…

算法设计与分析【期中+期末复习知识点总结】(持续更新)

第1章:算法概述 算法:具有输入、输出、确定性、有限性。 程序(算法数据结构程序):具有输入、输出、确定性(注意:程序可以不满足有限性,如操作系统是在无限循环中执行的程序&#x…

es的优势

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

教程:使用 Keras 优化神经网络

一、介绍 在 我 之前的文章中,我讨论了使用 TensorFlow 实现神经网络。继续有关神经网络库的系列文章,我决定重点介绍 Keras——据说是迄今为止最好的深度学习库。 我 从事深度学习已经有一段时间了,据我所知,处理…

橱柜的装修干货|板材、五金、高度、配色4个方面。福州中宅装饰,福州装修

引言 橱柜的装修干货。 橱柜是厨房的核心,一个好的橱柜能让厨房变得实用又美观。以下是关于橱柜装修的几个问题解答。 1. 橱柜的柜门常用的板材有哪些? 橱柜的柜门常用的板材有实木板、防火板、烤漆板、包复框、PVC板、膜压板等。不同板材有不同的特点…

庖丁解牛:NIO核心概念与机制详解 01

文章目录 Pre输入/输出Why NIO流与块的比较通道和缓冲区概述什么是缓冲区?缓冲区类型什么是通道?通道类型 NIO 中的读和写概述Demo : 从文件中读取1. 从FileInputStream中获取Channel2. 创建ByteBuffer缓冲区3. 将数据从Channle读取到Buffer中 Demo : 写…

五、hdfs常见权限问题

1、常见问题 2、案例 (1)问题 (2)hdfs的超级管理员 (3)原因 没有使用Hadoop用户对hdfs文件系统进行操作。 在Hadoop文件系统中,Hadoop用户相当于Linux系统中的root用户,是最高级别用…

win10电脑无法联网,设置IPv4,点击属性无法打开,闪退

win10设置IPv4,点击属性无法打开,闪退 问题:win10设置IPv4,点击属性无法打开,闪退 问题:win10设置IPv4,点击属性无法打开,闪退 第1步:用管理员打开cmd命令窗口,然后输入下面的命令&…

JVM的运行时数据区

Java虚拟机(JVM)的运行时数据区是程序在运行过程中使用的内存区域,主要包括以下几个部分: 程序计数器虚拟机栈本地方法栈堆方法区运行时常量池直接内存 不同的虚拟机实现可能会略有差异。这些区域协同工作,支持Java…

BUUCTF snake 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 下载附件,解压得到一张snake的图片。 密文: 这里有一张蛇的图片,本人害怕不敢放,想看自己下载附件解压。(吐槽一下,我做这道题,全…

每天一点python——day71

#每天一点Python——71 #格式化字符串在Python中,你可以使用格式化字符串来动态地插入变量的值、表达式的结果等到字符串中。 如图:xxx部分需要不断变化,再和原文拼接 如上图所示这是一个类似于字符串拼接的操作。 因为字符串拼接操作会产生很…

【算法挨揍日记】day26——53. 最大子数组和、918. 环形子数组的最大和

53. 最大子数组和 53. 最大子数组和 题目描述: 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 解题思路: 状态…

公司会倒闭,但大模型肯定不会

咋玩抖音的我,前几天在抖音上发了一张图片,没想到竟然有1000多的播放量。 当然这个播放量不算高,甚至在抖音的体系里属于很低的,但是比我预料的可能只有个位数的播放量是高了不少。 这张图片是我用某国产 AI 软件生成的&#xff…