Bri*_*etz 16
这与Java 10无关; 规则与以往一样.
在每个Java版本中,类文件版本号都已递增.您可以在较新的Java运行时上运行较旧的类文件(您可以运行二十年前在Java 10上的Java 1.0下编译的文件!),但从未在真正的运行时运行较新的类文件.Java 10没有改变.
但是,如果您不使用自该版本以来引入的较新功能,则可以编译类以使它们在旧版本上运行.这通常由-source和-target开关完成:
// Run this on Java 8
javac -source 6 -target 6 Foo.java
Run Code Online (Sandbox Code Playgroud)
并且您将获得将在Java 6及更高版本上运行的类文件.(源版本不能大于目标版本.)最近用更全面的--release选项取代了:
javac --release 9
Run Code Online (Sandbox Code Playgroud)
这不仅意味着-source 9和-target 9,但是编译器也将阻止你使用9之后推出的JDK功能.
javac已经支持了--release一段时间的争论.只要您不使用较新版本的功能(在本例中为Java 10),您就可以:
javac --release 9
Run Code Online (Sandbox Code Playgroud)
一切都应该工作正常.更好的是,如果存在需要解决的问题,Java编译器会抱怨.
请注意,UnsupportedClassVersionError如果代码在技术上是有效的,那么即使代码在技术上是有效的,你也会得到一个,因为编译的字节码中包含了所需的最低Java版本,这默认为当前版本的java编译器.
如今,如果要使用较新的java语言功能,还可以使用支持旧JVM的代码,也可以使用多版本jar.
| 归档时间: |
|
| 查看次数: |
2067 次 |
| 最近记录: |