■本地JDK
■查看方式1
以十六进行形式打开文件
format-hex ./HelloWorld.class

===
CA FE BA BE 00 00 00 34 00 1D 0A 00 06 00 0F 09
===
| HEX | 十进制 | jdk |
| 2E | 46 | jdk1.2 |
| 2F | 47 | jdk1.3 |
| 30 | 48 | jdk1.4 |
| 31 | 49 | jdk1.5 |
| 32 | 50 | jdk1.6 |
| 33 | 51 | jdk1.7 |
| 34 | 52 | jdk1.8 |
| 35 | 53 | jdk9 |
| 36 | 54 | jdk10 |
| 37 | 55 | jdk11 |
| 38 | 56 | jdk12 |
| 39 | 57 | jdk13 |
===
| 公开大版本名称 | Major | 版本号 | 内部版本号格式 | 发布时间 |
| Java8(1.8) | 52(0x34) | 1.8.0_XXX | 1.8.0_301 | 2014年3月 |
| Java9 | 53(0x35) | 9.0.X | 9.0.4 | |
| Java10 | 54(0x36) | 10.0.X | 10.0.2 | |
| Java11(LTS) | 55(0x37) | 11.0.X | 11.0.12 | |
| Java12 | 56(0x38) | 12.0.X | 12.0.2 | |
| Java13 | 57(0x39) | 13.0.X | 13.0.2 | |
| Java14 | 58(0x3A) | 14.0.X | 14.0.2 | |
| Java15 | 59(0x3B) | 15.0.X | 15.0.2 | |
| Java16 | 60(0x3C) | 16.0.X | 16.0.2 | |
| Java17(LTS) | 61(0x3D) | 17.0.X | 17.0.3 | 2021年9月 |
| Java18 | 62(0x3E) | 18.0.X | 18.0.2 | |
| Java19 | 63(0x3F) | 19.0.X | 19.0.1 | |
| Java20 | 64(0x40) | 20.0.X | 20.0.1 | 2023年3月 |
| Java21(LTS) | 65(0x41) | 21.0.X | 21.0.0 | 2023年9月 |
| Java22 | 66(0x42) | 20.1.X | 22.x.x | 2024年3月 |
| Java23 | 67(0x44) | 21.1.X | 23.x.x | 2025年9月 |
| Java24 | 68(0x45) | 20.1.X | 24.x.x | 2024年3月 |
===
(LTS) 表示这是一个“长期支持版本”(Long-Term Support)
2023年5月查看记录

===
-
JDK 1.0 - 1996年1月
(首个正式版本,代号Oak) -
JDK 1.1 - 1997年2月
(引入内部类、JDBC、RMI等) -
J2SE 1.2 - 1998年12月
(更名为Java 2 Platform,引入集合框架、JIT编译器等) -
J2SE 1.3 - 2000年5月
(HotSpot JVM成为默认,引入JNDI、JavaSound) -
J2SE 1.4 - 2002年2月
(引入NIO、正则表达式、XML处理等) -
J2SE 5.0 - 2004年9月
(重大更新:泛型、注解、枚举、自动装箱/拆箱等) -
Java SE 6 - 2006年12月
(Sun移交OpenJDK,改进脚本引擎、JAX-WS等) -
Java SE 7 - 2011年7月
(Oracle收购Sun后首个版本,引入try-with-resources、NIO.2等) -
Java SE 8 - 2014年3月
(里程碑版本:Lambda表达式、Stream API、新的日期时间API) -
Java SE 9 - 2017年9月
(模块化系统JPMS、JShell等) -
Java SE 10 - 2018年3月
(局部变量类型推断var,短期支持版本) -
Java SE 11 - 2018年9月
(首个长期支持版本 LTS,移除Java EE模块,引入HTTP Client) -
Java SE 12 - 2019年3月
(Switch表达式预览,短期支持版本) -
Java SE 13 - 2019年9月
(文本块预览,短期支持版本) -
Java SE 14 - 2020年3月
(Records预览、Pattern Matching for instanceof) -
Java SE 15 - 2020年9月
(Sealed Classes预览,短期支持版本) -
Java SE 16 - 2021年3月
(Records、Pattern Matching正式化,短期支持版本) -
Java SE 17 - 2021年9月
(LTS版本,Sealed Classes正式化,恢复严格封装) -
Java SE 18 - 2022年3月
(UTF-8默认编码、简单Web服务器等,短期支持版本) -
Java SE 19 - 2022年9月
(虚拟线程预览、结构化并发等,短期支持版本) -
Java SE 20 - 2023年3月
(Scoped Values预览,短期支持版本) -
Java SE 21 - 2023年9月
(LTS版本,虚拟线程正式化,分代ZGC等)
===
■查看方式2
javap -v XXX.class
javap -v HelloWorld.class
major 显示为52 (是十进制)

===
PS C:\test\myJava> javap -v HelloWorld.class Classfile /C:/test/myJava/HelloWorld.class
Last modified 2018-11-18; size 430 bytes
MD5 checksum 19f3d94a06c6349d050673c6dabd9616
Compiled from "HelloWorld.java"
class HelloWorld
minor version: 0
major version: 52
flags: ACC_SUPER
Constant pool:
#1 = Methodref #6.#15 // java/lang/Object."<init>":()V
#2 = Fieldref #16.#17 // java/lang/System.out:Ljava/io/PrintStream;
===
本文介绍如何通过解析Java字节码来识别编译时所使用的JDK版本,提供了两种实用的方法:使用十六进制查看器和javap工具。通过观察字节码文件的头部信息和使用javap的详细输出选项,可以准确地确定Java应用程序的编译环境。

&spm=1001.2101.3001.5002&articleId=108088981&d=1&t=3&u=384e01d7aa574a4a90379ed6a174f953)

被折叠的 条评论
为什么被折叠?



