Java 类文件格式主要版本号列表?

IT小君   2021-09-11T06:15:00

我在另一篇文章中看到了 Java 的主要版本号列表:

  • Java 1.2 使用主要版本 46
  • Java 1.3 使用主要版本 47
  • Java 1.4 使用主要版本 48
  • Java 5 使用主要版本 49
  • Java 6 使用主要版本 50
  • Java 7 使用主要版本 51
  • Java 8 使用主要版本 52
  • Java 9 使用主要版本 53
  • Java 10 使用主要版本 54
  • Java 11 使用主要版本 55
  • Java 12 使用主要版本 56
  • Java 13 使用主要版本 57
  • Java 14 使用主要版本 58
  • Java 15 使用主要版本 59
  • Java 16 使用主要版本 60

这份名单从何而来?有没有具体的参考资料?最好也显示小版本的东西?

评论(6)
IT小君

这些来自类版本。如果您尝试在 java 5 运行时加载为 java 6 编译的内容,您将收到错误、不兼容的类版本、得到 50、预期为 49。或类似的东西。

有关更多信息,请参见此处的字节偏移量 7。

其他信息也可以在这里找到

2021-09-11T06:15:01   回复
IT小君

我在描述类文件格式的维基百科页面上找到了 Java 类文件版本列表:

http://en.wikipedia.org/wiki/Java_class_file#General_layout

在字节偏移量 6 和 7 下,列出了版本与它们对应的 Java VM。

2021-09-11T06:15:01   回复
IT小君

如果您遇到有关“类文件错误编译器”的问题,可以通过 Eclipse 将项目的 JRE 更改为其对应的对象来解决此问题。

  1. 构建路径
  2. 配置构建路径
  3. 将库更改为朋友最后显示的表的通讯员。
  4. 创建“jar 文件”并编译执行。

我做到了,并且奏效了。

2021-09-11T06:15:01   回复
IT小君

主要版本号的官方来源:

Java 虚拟机规范,第 4 章。类文件格式

实际上对于版本 16,必须针对较新版本进行更新

2021-09-11T06:15:02   回复
IT小君

如果您在 有一个类文件build/com/foo/Hello.class,您可以使用以下命令检查它编译的 Java 版本:

javap -v build/com/foo/Hello.class | grep "major"

用法示例:

$ javap -v build/classes/java/main/org/aguibert/liberty/Book.class | grep major
  major version: 57

根据OP中的表格,主要版本57意味着类文件被编译为JDK 13字节码级别

2021-09-11T06:15:02   回复
IT小君

我在我的 .lessfilter 类中使用 javap,所以我可以反编译并知道它们是用什么版本直接编译的

*.class)
echo "/** "
javap -verbose "$1" | grep version | sed -e 's/50/Java6/' -e 's/51/Java7/' -e 's/52/Java8/' -e 's/53/Java9/' -e 's/54/Java10/' -e 's/55/Java11/' -e 's/56/Java12/' -e 's/57/Java13/'
echo " **/"
java -jar ~/bin/cfr-0.150.jar "$1" | enscript --color --language=ansi --highlight=java -o - -q
;;

(试图作为评论添加到以前的答案,但无法格式化代码,并认为这可能对其他人有用)

2021-09-11T06:15:02   回复