在Javac中使用-source

时间:2019-05-06 13:22:59

标签: java

docs

  

-源版本指定接受的源代码版本。

如果我有一个JDK版本(例如1.8),并且提到了-source=1.6,那是什么意思?这是否仅意味着我编写的任何代码都可以由JDK 1.6或更高版本的javac编译?

如果是这种情况,为什么在-source=1.6命令中传递javac?因为这将生成.class文件,因此没有要标记的源代码(源代码与1.6或更高版本的兼容性)?使用javac命令后,我们得到的只是字节码,没有.java文件。

4 个答案:

答案 0 :(得分:2)

  

这是否仅意味着我编写的任何代码都可以由JDK 1.6或更高版本的javac编译?

不。

-source=1.6选项意味着您的代码只能使用Java语言结构,这些结构是Java语言的Java 6和早期版本的一部分。

例如,任何Java 8 lambda或Java 9 var声明都将标记为编译错误。

答案 1 :(得分:1)

Java8引入了lambda表达式。如果您使用-source=1.6编译应用程序,则尽管JDK8支持lambda表达式,但编译器将不允许它。

答案 2 :(得分:1)

  

如果我有一个JDK版本,例如1.8,而我提到了-source = 1.6,那是什么意思?这仅表示我编写的任何代码都可以由JDK 1.6或更高版本的javac编译吗?

如果您的代码使用Java 8功能,则甚至无法使用-source = 1.6进行编译。否则,不一定是正确的,但是通常是的,它应该与Java 6及更高版本一起工作。

  

如果是这种情况,为什么在javac命令中传递-source = 1.6?因为这将生成.class文件,因此没有要标记的源代码(源代码与1.6或更高版本的兼容性)?经过javac命令后,我们得到的只是字节码,没有.java文件。

Javac是Java编译器。当然,它将生成.class文件,因为这是Java程序的编译形式。你为什么要通过?假设您要定位特定版本,这是将支持保持在该级别的最简单方法。

您可以使用Java 8功能(lambdas,streams,datetimeformatter)进行测试,然后尝试进行编译。您的编译将失败。

答案 3 :(得分:0)

通过在编译器上指定source参数,您是告诉编译器希望您提交的源代码符合该Java版本,并对照所选版本的特定语言功能进行检查(默认情况下,即使您自己未指定源版本,通常也是最新版本)。文档明确了可接受的值和默认值。这不会更改您的源代码或将您的代码转换为旧版本,只会警告您是否正在使用Java更高版本中的功能。如果您不使用Java语言的较新功能,那么它将像往常一样简单地编译代码并生成类文件。

javac MyProgram.java -source 1.6

上面的命令将告诉编译器将源代码视为与Java 1.6版兼容。

以下是JDK 1.8的允许值以及文档中的说明。

1.3 The compiler does not support assertions, generics, or other language features introduced after Java SE 1.3.

1.4 The compiler accepts code containing assertions, which were introduced in Java SE 1.4.

1.5 The compiler accepts code containing generics and other language features introduced in Java SE 5.

5 Synonym for 1.5.

1.6 No language changes were introduced in Java SE 6. However, encoding errors in source files are now reported as errors instead of warnings as in earlier releases of Java Platform, Standard Edition.

6 Synonym for 1.6.

1.7 The compiler accepts code with features introduced in Java SE 7.

7 Synonym for 1.7.

1.8 This is the default value. The compiler accepts code with features introduced in Java SE 8.

8 Synonym for 1.8.