查看 Java .class 文件版本
Jihongchang(讨论 | 贡献)2023年2月1日 (三) 10:26的版本
https://www.baeldung.com/java-find-class-version
编译 Java 文件时,会生成一个 .class 文件。
在某些情况下,我们需要找到编译后的类文件的 Java 发布版本。
每个 Java 主要版本为其生成的 .class 文件分配一个主要版本。
在此表中,我们将 .class 的主版本号映射到引入该类版本的 JDK 版本,并显示该版本号的十六进制表示形式:
Java Release | Class Major Version | Hex |
---|---|---|
Java SE 18 | 62 | 003e |
Java SE 17 | 61 | 003d |
Java SE 16 | 60 | 003c |
Java SE 15 | 59 | 003b |
Java SE 14 | 58 | 003a |
Java SE 13 | 57 | 0039 |
Java SE 12 | 56 | 0038 |
Java SE 11 | 55 | 0037 |
Java SE 10 | 54 | 0036 |
Java SE 9 | 53 | 0035 |
Java SE 8 | 52 | 0034 |
Java SE 7 | 51 | 0033 |
Java SE 6 | 50 | 0032 |
Java SE 5 | 49 | 0031 |
JDK 1.4 | 48 | 0030 |
JDK 1.3 | 47 | 002f |
JDK 1.2 | 46 | 002e |
JDK 1.1 | 45 | 002d |
使用 javap 查看 .class 文件的版本
比如使用 Java SE 8 编译 Sample.java 后得到的 Sample.class 文件,
用 javap 命令查看 Sample.class
C:\Users\Administrator\IdeaProjects\test-springboot\target\classes\org\example>javap -verbose Sample
警告: 二进制文件Sample包含org.example.Sample
Classfile /C:/Users/Administrator/IdeaProjects/test-springboot/target/classes/org/example/Sample.class
Last modified 2023-2-1; size 582 bytes
MD5 checksum 43f97b7f92af266d68d897e33e0481cf
Compiled from "Sample.java"
public class org.example.Sample
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
……
其中 “major version: 52”对应上表就是 Java SE 8
请务必注意,此版本值并不表示该应用程序是使用相应的 JDK 构建的。
类文件版本可以与用于编译的 JDK 不同。
例如,如果我们使用 JDK11 构建代码,它应该生成版本为 55 的 .class 文件。
但是,如果我们在编译期间传递 “-target 8”,则对 .class 文件使用 javap 查看显示为“major version:52”。
Linux 中查看
可以使用命令
javap -verbose Sample | grep major
windows 中
javap -verbose Sample|findstr major