【问题标题】:List of Java class file format major version numbers?Java类文件格式主要版本号列表?
【发布时间】:2012-02-28 13:27:31
【问题描述】:

我在另一篇文章中看到了 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
  • Java 17 使用主要版本 61

这个列表来自哪里?有没有具体的参考?最好也显示次要版本的东西?

【问题讨论】:

  • 有趣的是,这个信息的最佳来源是这个问题,询问信息的最佳来源在哪里。
  • 这个问题是迄今为止最好的答案。

标签: java version


【解决方案1】:

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

有关详细信息,请参阅字节偏移 7 中的 here

其他信息也可以在here找到。

【讨论】:

  • 有没有办法直接从 javac 回显主版本号(类版本),而不使用像 javap -verbose MyClass 这样的现有类?
  • 不,没有。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    主要版本号官方来源:

    Java Virtual Machine Specification, Chapter 4. The class File Format

    JVM 规范的最新发布版本可以在here找到。

    【讨论】:

    • 这肯定是一个公认的答案
    【解决方案4】:

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

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

    我做到了,它奏效了。

    【讨论】:

      【解决方案5】:

      如果您在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 中的表格,major version 57 表示类文件编译到 JDK 13 字节码级别

      【讨论】:

        【解决方案6】:

        我在我的 .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
        ;;
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-15
          • 1970-01-01
          • 2022-11-08
          • 2012-02-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多