java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > JDK version和class file version对应关系

JDK version和class file version(Class编译版本号)对应关系解读

作者:lzhfdxhxm

这篇文章主要介绍了JDK version和class file version(Class编译版本号)对应关系,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

JDK version和class file version(Class编译版本号)对应关系

JDK 19 = 63,

JDK 18 = 62,

JDK 17 = 61,
JDK 16 = 60,
JDK 15 = 59,
JDK 14 = 58,
JDK 13 = 57,
JDK 12 = 56,
JDK 11 = 55,
JDK 10 = 54,
JDK 9 = 53,
JDK 8 = 52,
JDK 7 = 51,
JDK 6.0 = 50,
JDK 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45.0-45.6

可以使用下列的方式来查看

使用文本编辑器EmEditor等以16进制方式打开.class文件,

在魔数之后的就是次版本号和主版本号:

图中红框中的代表版本号52.0

各个版本的对应关系

JDK版本号Class版本号16进制
1.145.000 00 00 2D
1.246.000 00 00 2E
1.347.000 00 00 2F
1.448.000 00 00 30
1.549.000 00 00 31
1.650.000 00 00 32
1.751.000 00 00 33
1.852.000 00 00 34

备注:

文件结构可以在JVM规范里查看,链接里是Java SE 19的版本 Chapter 4. The class File Format (oracle.com)

https://docs.oracle.com/javase/specs/jvms/se19/html/jvms-4.html#jvms-4.1

其它jdk版本的话,更改下链接里的se后的值就行。

jar包对不同JDK版本的兼容性问题:Unsupported major.minor version 52.0

Unsupported major.minor version 52.0 这类错误是因为Java版本不一致造成的,在高版本的JDK(1.8)环境中编译JAR包,然后JAR在低版本的JVM(1.6)中运行

The issue is because of Java version mismatch. Referring to the Wikipedia Java Class Reference :

These are the reported major numbers. The error regarding the unsupported major.minor version is because during compile time you are using a higher JDK and a lower JDK during runtime.

解决的方法

那么现在如果碰到这种问题该知道如何解决了吧,还会像我所见到有些兄弟那样,去找个 1.4 的 JDK 下载安装,然后用其重新编译所有的代码吗?

其实大可不必如此费神,我们一定还记得 javac 还有个 -target 参数,对啦,可以继续使用 1.5 JDK,编译时带上参数 -target 1.4 -source 1.4 就 OK 啦,不过你一定要对哪些 API 是 1.5 JDK 加入进来的了如指掌,不然你的 class 文件拿到 JVM 1.4 下就会 method not found。

目标 JVM 是 1.3 的话,编译选项就用 -target 1.3 -source 1.3 了。

其实这种方式挺不方便,因为你下载的Eclipse工具有可能不支持低版本的JSK

所以,最简单方式还是对 Eclipse 的项目属性的设置(项目右键 -> properties -> Java Compiler, 设置"Compeler compliance settings"为1.6),如图

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文