jdk与class version版本对照表
参考文档:
https://blog.csdn.net/qq_22211217/article/details/113825379
https://mkyong.com/java/java-unsupported-class-file-major-version-61/
java的class文件是二进制文件,其中前四个字节是magic位,第五字节对应minor 第六个字节对应和major
class与jdk版本关系:
class 第5和6字节 | minor版本 | major版本 | jdk版本 |
---|---|---|---|
2D03 | 45 | 3 | jdk1.0 |
2D03 | 45 | 3 | jdk1.1 |
2E00 | 46 | 0 | jdk1.2 |
2F00 | 47 | 0 | jdk1.3 |
3000 | 48 | 0 | jdk1.4 |
3100 | 49 | 0 | jdk1.5 |
3200 | 50 | 0 | jdk1.6 |
3300 | 51 | 0 | jdk1.7 |
3400 | 52 | 0 | jdk1.8 |
3500 | 53 | 0 | jdk9 |
3600 | 54 | 0 | jdk10 |
3700 | 55 | 0 | jdk11 |
3800 | 56 | 0 | jdk12 |
3900 | 57 | 0 | jdk13 |
3A00 | 58 | 0 | jdk14 |
3B00 | 59 | 0 | jdk15 |
3D00 | 61 | 0 | jdk17 |
javap 查看class 文件编译时JDK版本
命令参数:
javap --help
用法: javap <options> <classes>
其中, 可能的选项包括:
-help --help -? 输出此用法消息
-version 版本信息
-v -verbose 输出附加信息
-l 输出行号和本地变量表
-public 仅显示公共类和成员
-protected 显示受保护的/公共类和成员
-package 显示程序包/受保护的/公共类
和成员 (默认)
-p -private 显示所有类和成员
-c 对代码进行反汇编
-s 输出内部类型签名
-sysinfo 显示正在处理的类的
系统信息 (路径, 大小, 日期, MD5 散列)
-constants 显示最终常量
-classpath <path> 指定查找用户类文件的位置
-cp <path> 指定查找用户类文件的位置
-bootclasspath <path> 覆盖引导类文件的位置
查看jar中class文件:
javap -v -cp spring-boot-2.7.3.jar org.springframework.boot.Banner
javap -v -cp spring-boot-3.0.0-M4.jar org.springframework.boot.Banner
查看class文件:
javap -v ./org/eclipse/core/runtime/jobs/ISchedulingRule.class
Classfile /root/.cache/bazel/_bazel_root/74701efd2f2b9f7ec0e1a36d2d8b0c9b/execroot/__main__/bazel-out/k8-fastbuild/bin/t/org/eclipse/core/runtime/jobs/ISchedulingRule.class
Last modified Dec 31, 2009; size 237 bytes
MD5 checksum 36395a293069bd6508d359e7ecadb119
Compiled from "ISchedulingRule.java"
public interface org.eclipse.core.runtime.jobs.ISchedulingRule
minor version: 0
major version: 61
flags: (0x0601) ACC_PUBLIC, ACC_INTERFACE, ACC_ABSTRACT