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

zphenhs4  于 2023-03-28  发布在  Java
关注(0)|答案(7)|浏览(133)

我在另一篇文章中看到了Java的主要版本号列表:
| java |主要版本|
| --------------|--------------|
| 二十|六十四|
| 十九|六十三|
| 十八岁|六十二|
| 十七岁|六十一|
| 十六岁|六十|
| 十五岁|五十九|
| 十四岁|五十八|
| 十三|五十七|
| 十二岁|五十六|
| 十一|五十五|
| 10个|五十四|
| 九|五十三|
| 八|五十二|
| 七|五十一|
| 六|五十|
| 五|四十九|
| 1.4 |四十八|
| 1.3 |四十七|
| 1.2 |四十六|
| 1.1 |四十五|
| 1.0.2节|四十五|
这个列表是从哪里来的?有没有具体的参考资料?最好是一些也显示次要版本的东西?

oxalkeyp

oxalkeyp1#

这些来自于类版本,如果你试图在java 5运行时加载一些为java 6编译的东西,你会得到错误,不兼容的类版本,得到50,期望49,或者类似的东西。
更多信息请参见字节偏移量7。
其他信息也可以在here中找到。

ctrmrzij

ctrmrzij2#

主要版本号的官方来源:
Java SE 20虚拟机规范,第4章。文件格式类
JVM规范的最新 * 发布 * 版本是here

sg3maiej

sg3maiej3#

我在Wikipedia页面上找到了描述类文件格式的Java类文件版本列表:
http://en.wikipedia.org/wiki/Java_class_file#General_layout
在字节偏移量6和7下,列出了它们对应的Java VM的版本。

c9x0cxw0

c9x0cxw04#

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

javap -v <path to class file> | grep "major"

示例用法:

$ javap -v build/classes/com/example/Book.class | grep major
  
major version: 57

根据OP中的表,major version 57意味着类文件被编译到JDK13字节码级别

vuktfyat

vuktfyat5#

  • (真的是一个扩展的评论比一个答案..)*

问题是关于“版本列表从何而来”。
这在this response中得到了回答,它引用了Java SE规范:“The class File Format”.似乎这是相当权威的(它也在维基中引用字节6(主要版本)值),应该是公认的答案。
几个答案似乎集中在如何使用javap或不使用它来确定值。这些应该是单独的问题。然而,找到版本的非javap方法是unix命令filefile读取magic,它在ClassFile结构中指定。
即:file myClass.class,或者更优雅地说,file -b myClass.class | awk -F',' '{print $NF}'
例如:

$ find * -name "*.class" -exec file -b {} \; | awk -F',' '{print $NF}' | sort -u
 version 45.3
 version 50.0 (Java 1.6)
 version 52.0 (Java 1.8)
368yc8dk

368yc8dk6#

如果你有一些关于“类文件的错误编译器”的问题,可以通过Eclipse将项目的JRE更改为对应的JRE来解决这个问题。
1.构建路径
1.配置生成路径
1.将库更改为上一个朋友显示的表的对应项。
1.创建“jar文件”并编译执行。
我照做了而且成功了。

vfhzx4xs

vfhzx4xs7#

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

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

相关问题