Java类文件格式主要版本号列表?
我在另一篇文章中看到了Java的主要版本号列表:Java类文件格式主要版本号列表?,java,version,Java,Version,我在另一篇文章中看到了Java的主要版本号列表: Java1.2使用主要版本46 Java1.3使用主版本47 Java1.4使用主版本48 Java5使用主版本49 Java6使用主版本50 Java7使用主版本51 Java8使用主版本52 Java9使用主版本53 Java10使用主要版本54 Java11使用主版本55 Java12使用主版本56 Java13使用主版本57 Java14使用主版本58 Java15使用主版本59 Java16使用主版本60 这个名单是从哪里来的?有没
- Java1.2使用主要版本46
- Java1.3使用主版本47
- Java1.4使用主版本48
- Java5使用主版本49
- Java6使用主版本50
- Java7使用主版本51
- Java8使用主版本52
- Java9使用主版本53
- Java10使用主要版本54
- Java11使用主版本55
- Java12使用主版本56
- Java13使用主版本57
- Java14使用主版本58
- Java15使用主版本59
- Java16使用主版本60
这个名单是从哪里来的?有没有具体的参考资料?最好是显示次要版本的东西?这些来自类版本。如果您试图在Java5运行时加载为Java6编译的内容,您将得到错误,不兼容的类版本,得到50,预期为49。或者类似的 有关更多信息,请参见字节偏移量7
还可以找到其他信息。我在Wikipedia页面上找到了描述类文件格式的Java类文件版本列表:
在字节偏移量6和7下,列出了它们对应的Java VM的版本。如果您对“类文件的错误编译器”有问题,可以通过Eclipse将项目的JRE更改为相应的JRE来解决
我做到了,而且成功了 如果类文件位于
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字节码级别主要版本号的官方来源:
实际上,对于版本16,必须更新到较新的版本我在类的.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
;;
(试图在前面的答案中添加注释,但无法格式化代码,并认为这可能对其他人有用)有没有一种方法可以直接从javac回显主要版本号(类版本),而不使用现有类,如,
javap-verbose MyClass
?不,没有。我注意到第三次编辑实际上删除了问题部分,并添加了此列表来源的参考(不是由OP完成的),从而将其转换为答案。但问题首先正是关于这一点。原始问题:“该列表来自何处?是否有具体的参考资料?最好是显示次要版本的内容?”请删除参考资料并再次添加该问题段落?否则这不是一个真正的问题,选择的答案在某种程度上是多余的。有趣的是,这个信息的最佳来源是这个问题,询问信息的最佳来源在哪里。