使用JDK 7和使用编译器兼容级别为1.7的JDK 8有什么区别?

5
我想知道在JDK 8下,使用编译器兼容级别1.7与JDK 7作为系统默认值来运行/构建软件是否有差异?我更关心与Android构建、应用程序构建、Eclipse、Android Studio等方面的参考。
3个回答

3

是的,JDK 1.8 中有许多新的类,例如 java.time 类。如果您使用 JDK 1.7 构建,将无法获得这些类;但如果您使用编译器兼容级别为 1.7 的 JDK 1.8 进行构建,则可以使用它们。


我问的原因是我将Fedora作为我的Android开发环境。由于JDK 7将在明年4月份停止支持,Fedora团队已经开始编译所有内容以支持Java 8,这使得在系统默认情况下运行JDK 7变得困难。因此,我必须使用JDK 8作为系统默认值。为了保持无误,我使用JDK 8作为系统默认值,并针对1.7进行编译。我这样做对吗?很高兴你没有“福斯特”作为你的中间名。如果你知道我在说什么。 - Sudhir Singh Khanger

1

在使用JDK 8并使用编译器兼容性级别1.7运行/构建软件与使用JDK 7作为系统默认时,存在差异。

  1. 在JDK 8下运行软件并使用编译器兼容性级别:您在jdk 1.7中进行编译,但在1.8上运行。没有问题,您的程序将按需工作。

  2. JDK 7作为系统默认值:您在1.7版本中进行编译,并在同一版本上运行。

我想知道在什么情况下您会选择第一种情况?


我问这个问题的原因是我将Fedora作为我的Android开发环境。由于JDK 7将在明年4月份停止更新,Fedora团队已经开始编译所有内容以支持Java 8,这使得运行JDK 7作为系统默认版本变得困难。因此,我必须使用JDK 8作为系统默认版本。为了避免问题,我使用JDK 8作为系统默认版本,并针对1.7进行编译。这样做是正确的吗? - Sudhir Singh Khanger

1
实际上有很大的区别。对于JDK,兼容性级别是指示编译器专门使用您指定版本的优化和链接功能。它在幕后做了更多的事情,但我不认为您想知道这些。新的JDK版本带来了新的功能,这些版本中的编译器能够在构建源Java文件的类文件或组装代码时理解和链接这些功能。因此,在这些JDKS中的JVM运行时也配备了处理这些优化和情况的能力。因此,如果没有兼容性级别,您使用JDK8构建的类文件只能在基于JDK8的运行时中正确运行。它们可能无法在JDK7或6中运行。为了解决这个问题,从而使您使用JDK8编译的代码可以在JDK8、7甚至6上运行,您需要相应地向编译器指令添加兼容性级别。缺点是您可能无法使用编译器提供的一些最新功能,但这种情况很少见,并且远远超过互操作性和可移植性的需求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接