什么是Eclipse中的"编译器合规级别"?

Avi*_*ohn 41 java eclipse

有一段时间我试图理解,但我仍然没有得到Eclipse中项目的"编译器合规级别".我查看了这个网站和谷歌,找不到我能理解的答案.

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

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

为什么这不够?

我永远不明白为什么我还需要将编译器合规性设置设置为JRE 6.

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

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

use*_*751 44

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

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

如果将合规性级别设置为"JRE 6",则会将Java 6源文件编译为Java 6类文件.

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

  • 谢谢你的评论.请确认我是否理解:编译器合规性设置告诉Eclipse"要使用的编译器版本".将编译器合规性级别设置为6将使编译器成为版本6,并生成版本6格式的编译文件.因此,如果我正在使用JDK 7,并且我希望我的程序能够在JRE 6上运行,那么将编译器合规性级别设置为JRE 6将意味着编译的.class文件将具有JRE 6理解的格式.它是否正确? (8认同)
  • 好的,为什么还需要将Java Build Path设置为使用适当的旧JRE库?为什么Java Build Path不能只包含最新的JRE库?我的意思是,如果我编写的程序能够在JRE 6上运行,我还需要在项目的Java Build Path中包含JRE 6和JRE 7(正确吗?).如果是这样,为什么? (4认同)

Bre*_*dan 7

它告诉你你所遵循的JDK版本; 具体而言,您使用构建定位哪个JRE.

它是运行代码所需的MINIMUM JRE