Java编译器javac的参数目标的用途

时间:2018-12-24 11:59:17

标签: java javac

当需要使用javac参数使用编译器的特殊目标版本target时,我尝试找到一个用例。

Java是向后兼容的,不是吗?因此,如果我用版本11编译一个hello world程序,它可以在版本8的JVM上运行,或者?

我能想象的唯一用例是,当您具有以特定版本编译的依赖项(其他jar),并且在编译自己的代码时必须匹配此特殊版本。

谢谢您的帮助!

2 个答案:

答案 0 :(得分:4)

Java是向后兼容的,不是吗?因此,如果我用版本11编译一个hello world程序,则该程序可以在版本8的JVM上运行。

完全后退。如果您具有使用版本8编译的Java类版本,则Java 11是 向后 兼容并可以运行它。反向不是向后兼容,而是--target命令行标志的目的。具体来说,由Java 11编译器编译的类 可以在Java 8上运行。否则,您将获得java.lang.UnsupportedClassVersionError: Unsupported major.minor version

答案 1 :(得分:3)

默认情况下,将根据javac附带的平台的引导程序类和扩展类来编译类。但是javac还支持交叉编译。

-target version
  

生成针对VM的指定版本的类文件。类   文件将在指定的目标和更高版本上运行,但不会   在早期版本的VM上。有效目标是1.1、1.2、1.3、1.4,   1.5(也为5),1.6(也为6)和1.7(也为7)...。 -target的默认值取决于-source的值:

If -source is not specified, the value of -target is 1.7
If -source is 1.2, the value of -target is 1.4
If -source is 1.3, the value of -target is 1.4
If -source is 1.5, the value of -target is 1.7
If -source is 1.6, the value of -target is 1.7
For all other values of -source, the value of -target is the value of -source.

有关更多详细信息,请参考javadoc here