Eclipse中的“编译器合规性级别”是什么?

有一段时间我试图理解,但是我仍然没有完全明白Eclipse中项目的“编译器合规性级别”是什么意思。 我看遍了这个网站和谷歌,找不到我能理解的答案。

假设我希望我的程序能够在JRE 6上运行。

我可以这样做:Project> Preferences> Java Build Path> Libraries,然后将我使用的JRE库设置为JRE 6。

为什么这不够?

我从来不明白为什么我还需要将编译器合规性设置设置为JRE 6。

我想了解在项目中使用JRE 6和将项目的编译器合规性设置设置为JRE 6的区别。

编译器合规性级别是什么意思?

编译器的合规性设置告诉编译器假装它是一个不同的Java版本。

Java 8编译器将生成类文件格式的Java 8版本的类文件,并接受Java 8源文件。 JRE 6无法加载此版本,因为它是在JRE 6之后创build的。

如果您将合规性级别设置为“JRE 6”,则会将Java 6源文件编译为Java 6类文件。

这就像将Word文档保存为“Word 97-2003格式” – 以便Word 97-2003可以读取您的文档。 您将以Java 6格式保存类文件,以便Java 6可以读取它们。

它告诉你你所遵守的是什么版本的JDK; 具体来说,你的构build目标是哪个JRE。

这是运行你的代码所需的最低JRE

描述“Java编译器合规性”设置的最简单方法是确定在“已编译的”Java代码中可以使用哪些Java虚拟机指令…以及要使用哪个库类版本。 JVM(及其库)的每个版本都可能引入新的指令(VM)或调整与JVM一起交付的类库。

您应该将该设置设置为您期望产品运行的最低级别的JVM。

Java编译器可以编译将在以前版本的JVM上运行的代码。 即使安装了JDK 6,也可以编写针对使用JDK 5的人员的代码。“编译器合规性”级别告诉Eclipse在编译项目时使用适当的设置,以确保代码在您指定的目标JVM上工作。 默认情况下,如果我记得,EclipseselectJava 5合规性。 如果您想要使用特定于Java 6或Java 7的代码function,则必须更改合规性级别。