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

 更新时间:2023年07月21日 16:12:33   作者: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

  • 次版本号:00 00   (小数点后面的部分)
  • 主版本号:00 34   (小数点前面的部分)对应的10进制为52,对应的jdk版本为jdk8

各个版本的对应关系

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 :

  • J2SE 8 = 52
  • J2SE 7 = 51
  • J2SE 6.0 = 50
  • J2SE 5.0 = 49
  • JDK 1.4 = 48
  • JDK 1.3 = 47
  • JDK 1.2 = 46
  • JDK 1.1 = 45

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),如图

总结

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

相关文章

  • Java实现图章或签名插在pdf的固定位置

    Java实现图章或签名插在pdf的固定位置

    使用Java技术在word转换成pdf过程中实现将图章或者签名插入在pdf中,并生成带图章或者签名的pdf,来完成某些特定场景的需求,文中有详细的代码示例,需要的朋友可以参考下
    2023-10-10
  • Springboot项目启动不加载resources目录下的文件问题

    Springboot项目启动不加载resources目录下的文件问题

    这篇文章主要介绍了Springboot项目启动不加载resources目录下的文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • JavaWeb实现用户登录与注册功能

    JavaWeb实现用户登录与注册功能

    这篇文章主要为大家详细介绍了JavaWeb实现用户登录与注册功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 简单分析Java的求值策略原理

    简单分析Java的求值策略原理

    在本篇文章里小编给大家整理的是一篇关于简单分析Java的求值策略原理内容,有需要的朋友们可以学习下。
    2021-06-06
  • 新手学习JQuery基本操作和使用案例解析

    新手学习JQuery基本操作和使用案例解析

    这篇文章主要介绍了新手学习JQuery基本操作和使用案例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • JAVA 实现延迟队列的方法

    JAVA 实现延迟队列的方法

    这篇文章主要介绍了JAVA 实现延迟队列的方法,文中讲解非常详细,供大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Java内存释放实现代码案例

    Java内存释放实现代码案例

    这篇文章主要介绍了Java内存释放实现代码案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • springmvc视图解析流程代码实例

    springmvc视图解析流程代码实例

    这篇文章主要介绍了springmvc视图解析流程代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • JAVA Swing实现窗口添加课程信息过程解析

    JAVA Swing实现窗口添加课程信息过程解析

    这篇文章主要介绍了JAVA Swing实现窗口添加课程信息过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Spring Boot 在启动时进行配置文件加解密的方法详解

    Spring Boot 在启动时进行配置文件加解密的方法详解

    这篇文章主要介绍了Spring Boot 在启动时进行配置文件加解密的方法,本文通过实例给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06

最新评论