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

总结

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

相关文章

  • Spring加载属性文件方式(自动加载优先级问题)

    Spring加载属性文件方式(自动加载优先级问题)

    这篇文章主要介绍了Spring加载属性文件方式(自动加载优先级问题),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java Socket实现单线程通信的方法示例

    Java Socket实现单线程通信的方法示例

    这篇文章主要介绍了Java Socket实现单线程通信的方法,结合具体实例形式分析了java socket单线程通信的原理与客户端、服务器端相关实现技巧,需要的朋友可以参考下
    2017-06-06
  • Spring Boot集成Druid数据库连接池

    Spring Boot集成Druid数据库连接池

    这篇文章主要介绍了Spring Boot集成Druid数据库连接池,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • java实现学生成绩录入系统

    java实现学生成绩录入系统

    这篇文章主要为大家详细介绍了java实现学生成绩录入系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • SpringBoot热部署启动关闭流程详解

    SpringBoot热部署启动关闭流程详解

    Spring Boot启动热部署是一种技术,它能让开发者在不重启应用程序的情况下实时更新代码。这样可以提高开发效率,避免频繁重启应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-04-04
  • java 对象输入输出流读写文件的操作实例

    java 对象输入输出流读写文件的操作实例

    这篇文章主要介绍了java 对象输入输出流读写文件的操作实例的相关资料,这里使用实现Serializable接口,需要的朋友可以参考下
    2017-07-07
  • Java Web导出等比例图片到Excel的实现过程

    Java Web导出等比例图片到Excel的实现过程

    我们使用Java导出图片到Excel,打开成功导出的Excel一看,商品对应的图片都很规矩的按照我的设置铺满了整个单元格,但是,商品图片却都变形了,这样肯定是不行的,于是第一反应就是将图片等比例导出,所以本文本给大家介绍了如何使用Java Web导出等比例图片到Excel
    2023-11-11
  • SpringBoot项目在IntelliJ IDEA中如何实现热部署

    SpringBoot项目在IntelliJ IDEA中如何实现热部署

    spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。,这篇文章主要介绍了SpringBoot项目在IntelliJ IDEA中如何实现热部署,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • @Scheduled 如何读取动态配置文件

    @Scheduled 如何读取动态配置文件

    这篇文章主要介绍了@Scheduled 如何读取动态配置文件的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java多线程中线程池常见7个参数的详解以及执行流程

    Java多线程中线程池常见7个参数的详解以及执行流程

    本文主要介绍了Java多线程中线程池常见7个参数的详解以及执行流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论