Java 10编译的类可以在9上运行吗?

时间:2018-03-20 03:44:03

标签: java java-10

如果我理解正确,Java 10的二进制形式与Java 9完全相同,那么它就不会出现任何问题。

我的假设是否正确?

2 个答案:

答案 0 :(得分:15)

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

在每个Java版本中,类文件版本号都已递增。您可以在较新的Java运行时上运行较旧的类文件(您可以运行二十年前在Java 10上的Java 1.0下编译的文件!),但从未运行 newer < / em>旧运行时的类文件。 Java 10没有改变。

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

// Run this on Java 8
javac -source 6 -target 6 Foo.java

您将获得将在Java 6及更高版本上运行的类文件。 (源版本不能大于目标版本。)最近用更全面的--release选项替换了它:

javac --release 9

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

答案 1 :(得分:6)

javac暂时支持--release参数。只要您不使用较新版本的功能(在本例中为Java 10),您就可以执行以下操作:

javac --release 9

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

请注意,如果不执行此操作,即使代码在技术上有效,也会得到UnsupportedClassVersionError,因为所需的最低Java版本为included in the compiled bytecode,并且默认为当前版本的java编译器。< / p>

如果你想使用更新的java语言功能,还包括支持旧JVM的代码,现在你也可以使用multirelease jars