首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 10编译后的类能在9上运行吗?

Java 10编译后的类能在9上运行吗?
EN

Stack Overflow用户
提问于 2018-03-20 03:44:03
回答 2查看 2.6K关注 0票数 5

如果我正确理解Java 10的二进制形式,它与Java 9是100%相同的,所以它不应该造成任何问题。

我的假设正确吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-20 14:42:10

这与Java 10无关;规则与以前一样。

在Java的每个版本中,类文件版本号都增加了。您可以在较新的Java运行时上运行旧的类文件(您可以运行20年前在Java 10上的Java1.0下编译的文件!),但是在较旧的运行时上运行较新的类文件从来都不是真的。这一点在Java 10中并没有改变。

但是,如果您不使用自该版本以来引入的新特性,则可以编译类,使它们在旧版本上运行。这以前由-source-target交换机完成:

代码语言:javascript
复制
// Run this on Java 8
javac -source 6 -target 6 Foo.java

您将获得在Java 6及更高版本上运行的类文件。(源版本不能大于目标版本。)最近,这个选项被更全面的--release选项所取代:

代码语言:javascript
复制
javac --release 9

这不仅意味着-source 9-target 9,而且编译器还将阻止您使用在9之后引入的JDK功能。

票数 17
EN

Stack Overflow用户

发布于 2018-03-20 03:50:27

javac支持--release参数已有一段时间了。只要您不使用新版本的特性(在本例中是Java 10),您就可以这样做:

代码语言:javascript
复制
javac --release 9

一切都应该很好。更好的是,如果存在需要解决的问题,Java编译器会抱怨。

注意,如果不这样做,您将得到一个UnsupportedClassVersionError,即使代码在技术上是有效的,因为所需的最低版本是包含在已编译的字节码中,这默认为当前版本的Java编译器。

现在,如果您想使用更新的java语言特性,也可以使用多释放罐,但也可以包括支持旧JVM的代码。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49376007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档