我在另一篇文章中看到了Java的主要版本号列表:
| java |主要版本|
| --------------|--------------|
| 二十|六十四|
| 十九|六十三|
| 十八岁|六十二|
| 十七岁|六十一|
| 十六岁|六十|
| 十五岁|五十九|
| 十四岁|五十八|
| 十三|五十七|
| 十二岁|五十六|
| 十一|五十五|
| 10个|五十四|
| 九|五十三|
| 八|五十二|
| 七|五十一|
| 六|五十|
| 五|四十九|
| 1.4 |四十八|
| 1.3 |四十七|
| 1.2 |四十六|
| 1.1 |四十五|
| 1.0.2节|四十五|
这个列表是从哪里来的?有没有具体的参考资料?最好是一些也显示次要版本的东西?
7条答案
按热度按时间oxalkeyp1#
这些来自于类版本,如果你试图在java 5运行时加载一些为java 6编译的东西,你会得到错误,不兼容的类版本,得到50,期望49,或者类似的东西。
更多信息请参见字节偏移量7。
其他信息也可以在here中找到。
ctrmrzij2#
主要版本号的官方来源:
Java SE 20虚拟机规范,第4章。文件格式类
JVM规范的最新 * 发布 * 版本是here。
sg3maiej3#
我在Wikipedia页面上找到了描述类文件格式的Java类文件版本列表:
http://en.wikipedia.org/wiki/Java_class_file#General_layout
在字节偏移量6和7下,列出了它们对应的Java VM的版本。
c9x0cxw04#
如果你有一个
build/com/foo/Hello.class
的类文件,你可以使用命令检查它是在哪个java版本编译的:示例用法:
根据OP中的表,major version 57意味着类文件被编译到JDK13字节码级别
vuktfyat5#
问题是关于“版本列表从何而来”。
这在this response中得到了回答,它引用了Java SE规范:“The
class
File Format”.似乎这是相当权威的(它也在维基中引用字节6(主要版本)值),应该是公认的答案。几个答案似乎集中在如何使用
javap
或不使用它来确定值。这些应该是单独的问题。然而,找到版本的非javap
方法是unix命令file
。file
读取magic
,它在ClassFile结构中指定。即:
file myClass.class
,或者更优雅地说,file -b myClass.class | awk -F',' '{print $NF}'
例如:
368yc8dk6#
如果你有一些关于“类文件的错误编译器”的问题,可以通过Eclipse将项目的JRE更改为对应的JRE来解决这个问题。
1.构建路径
1.配置生成路径
1.将库更改为上一个朋友显示的表的对应项。
1.创建“jar文件”并编译执行。
我照做了而且成功了。
vfhzx4xs7#
我在类的.lessfilter中使用javap,所以我可以反编译并直接知道它们是用什么版本编译的
(试图添加作为评论到以前的答案,但无法得到的代码被格式化,并认为这可能是其他人有用)