Java类文件格式主要版本号列表?
Posted
技术标签:
【中文标题】Java类文件格式主要版本号列表?【英文标题】:List of Java class file format major version numbers? 【发布时间】: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
这个列表来自哪里?有没有具体的参考?最好也显示次要版本的东西?
【问题讨论】:
有趣的是,这个信息的最佳来源是这个问题,询问信息的最佳来源在哪里。 这个问题是迄今为止最好的答案。 【参考方案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 更改为对应的来解决此问题。
-
构建路径
配置构建路径
将库更改为朋友最后显示的表格的对应方。
创建“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
;;
(尝试添加作为对先前答案的评论,但无法格式化代码,并认为这可能对其他人有用)
【讨论】:
以上是关于Java类文件格式主要版本号列表?的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向ELF 文件格式 ( ELF 文件当前版本号 | 操作系统 ABI 信息 | ABI 版本 | 文件头校验 | 文件头长度信息 )
Android 逆向ELF 文件格式 ( ELF 文件当前版本号 | 操作系统 ABI 信息 | ABI 版本 | 文件头校验 | 文件头长度信息 )