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