文章目录
原理分析
class
文件,即字节码文件,它有特定的二进制格式,这种格式是由 JVM
规范规定的,不受特定硬件或操作系统的影响。
字节码文件的二进制格式主要有如下部分:
magic number
(魔数):开头4个字节,始终为CAFE BABE
;version
(版本号):接下来4个字节表示Java
的版本。其中,前2个字节是minor version
(次版本号),后2个字节是major version
(主版本号);
所以,可以通过查看 class
文件的 major version
来确定其对应的编译器版本。
解决方案
打开 Visual Studio Code
,点击“插件”图标,搜索并安装插件 Hex Editor
使用 Hex Editor
打开对应的 class
文件,查看文件第一行的索引号为 06 及 07 这两个字节(这里为 00 32
),得到对应的 major version
然后通过 Java 版本对照表,即可知道 class
文件是由哪个版本的 Java 编译器编译生成的了(比如上面示例的 class
文件对应编译器版本为 JDK 6)
Java JDK | major version(十进制) | major version(十六进制) |
---|---|---|
18 | 62 | 0x3e |
17 | 61 | 0x3d |
16 | 60 | 0x3c |
15 | 59 | 0x3b |
14 | 58 | 0x3a |
13 | 57 | 0x39 |
12 | 56 | 0x38 |
11 | 55 | 0x37 |
10 | 54 | 0x36 |
9 | 53 | 0x35 |
8 | 52 | 0x34 |
7 | 51 | 0x33 |
6 | 50 | 0x32 |
5 | 49 | 0x31 |
1.4 | 48 | 0x30 |
1.3 | 47 | 0x2f |
1.2 | 46 | 0x2e |
1.1 | 45 | 0x2d |
其它解决方案
javap 命令行工具
javap -verbose App.class