我在另一篇文章中看到了Java的主要版本号列表:
Java | Major version |
---|---|
19 | 63 |
18 | 62 |
17 | 61 |
16 | 60 |
15 | 59 |
14 | 58 |
13 | 57 |
12 | 56 |
11 | 55 |
10 | 54 |
9 | 53 |
8 | 52 |
7 | 51 |
6 | 50 |
5 | 49 |
1.4 | 48 |
1.3 | 47 |
1.2 | 46 |
这个列表从何而来?有具体的参考吗?最好还能显示小版本?
我在另一篇文章中看到了Java的主要版本号列表:
Java | Major version |
---|---|
19 | 63 |
18 | 62 |
17 | 61 |
16 | 60 |
15 | 59 |
14 | 58 |
13 | 57 |
12 | 56 |
11 | 55 |
10 | 54 |
9 | 53 |
8 | 52 |
7 | 51 |
6 | 50 |
5 | 49 |
1.4 | 48 |
1.3 | 47 |
1.2 | 46 |
这个列表从何而来?有具体的参考吗?最好还能显示小版本?
当前回答
如果你遇到了关于“类文件的错误编译器”的问题,可以通过Eclipse将项目的JRE更改为相应的JRE来解决这个问题。
构建路径 配置生成路径 将库更改为朋友最后显示的表对应。 创建“jar文件”并编译并执行。
我这样做了,而且成功了。
其他回答
我在维基百科页面上找到了Java类文件版本的列表,描述了类文件的格式:
http://en.wikipedia.org/wiki/Java_class_file#General_layout
在字节偏移量6和7下,列出了它们对应的Java VM的版本。
如果你遇到了关于“类文件的错误编译器”的问题,可以通过Eclipse将项目的JRE更改为相应的JRE来解决这个问题。
构建路径 配置生成路径 将库更改为朋友最后显示的表对应。 创建“jar文件”并编译并执行。
我这样做了,而且成功了。
我在类的.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 5运行时加载一些java 6编译的东西,你会得到错误,不兼容的类版本,得到50,预期49。或者类似的东西。
更多信息请参见这里的字节偏移量7。
更多信息也可以在这里找到。
如果你在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中的表,主版本57意味着类文件被编译到JDK 13字节码级别