较新的JRE版本能否运行使用较旧的JDK版本编译的Java程序?

较新的JRE版本能否运行使用较旧的JDK版本编译的Java程序?,java,Java,这可能是一个愚蠢的问题,但在运行Java程序和使用Java 1.6版和1.7版编译的相关库时,我会遇到任何问题吗(我使用1.7版编译,而有些库使用1.6版编译)在1.7 JRE中运行整个程序?您不会遇到任何问题-这就是Java的魔力-它是向后兼容的。您可以在Java 8上运行Java 1中的几乎所有代码。Java 6代码没有理由不在Java 8运行时上运行 有趣的是,对于用Java 1.4编写的应用程序,在以后的运行时运行它们时,甚至可以提高速度。这是因为Java是不断发展的,不仅是称为“Jav

这可能是一个愚蠢的问题,但在运行Java程序和使用Java 1.6版和1.7版编译的相关库时,我会遇到任何问题吗(我使用1.7版编译,而有些库使用1.6版编译)在1.7 JRE中运行整个程序?

您不会遇到任何问题-这就是Java的魔力-它是向后兼容的。您可以在Java 8上运行Java 1中的几乎所有代码。Java 6代码没有理由不在Java 8运行时上运行

有趣的是,对于用Java 1.4编写的应用程序,在以后的运行时运行它们时,甚至可以提高速度。这是因为Java是不断发展的,不仅是称为“Java”的语言,还有JVM(Java虚拟机)。正如最新的JVM所预期的那样,我仍然拥有十多年前的源代码,这些代码仍然可以工作

如果您想以Java5VM为目标,那么可以使用Java8SDK工具来实现。您最终可以指定希望支持的目标VM,只要记住版本5 VM可能不支持版本8 VM将支持的所有功能


我刚刚针对新的Java8运行时测试了我用Java5编写的代码,一切都按预期进行,因此,即使我们现在有了更强大的语言和运行时,我们也可以继续使用我们过去的投资。仅此一点就使得Java成为公司的一个伟大的开发选择

正如已经回答的那样,您基本上是安全的,大多数产品和第三方库都能正常工作。然而,确实存在非常罕见的情况,即在JDK版本之间引入了二进制不兼容(使用旧JDK编译的类文件将无法在新JVM中运行的情况)

Oracle Java版本间不兼容的官方列表:
兼容性工具 与JDK 9一起打包,有一个名为的工具,它将验证兼容性,列出代码中不再使用的API,并建议替代方案(!)。您可以指定目标JDK版本(适用于JDK 9876),它将列出特定于目标版本的不兼容项

关于图书馆的补充意见: 一个合理的经验法则是使用库的最新稳定版本作为软件目标的JRE版本。显然,您会发现这条规则有许多例外,但一般来说,公共可用库的稳定性通常会随着时间的推移而增加

当然,在更改依赖项的版本时,必须考虑API兼容性版本控制

同样,大多数流行的依赖项都会有这样的信息应该可用的网页

但是,如果您使用的是更模糊的东西,那么您可以识别出哪些JRE是为您的依赖项编译的类


。您可能需要首先解压缩JAR文件。

如果您在Java 7运行时运行它,是的。如果您使用JDK 7进行开发,并将应用程序编译为JDK 7应用程序,那么,不,它将无法在较旧的运行时上工作。有很多原因要求用户请升级到最新的运行时,主要是安全原因,但也有一些性能问题。如果可以的话,我会选择Java 7,除非你真的必须支持旧版本,否则支持旧版本没有什么意义。-1 MagicDraw不适用于较新版本的Java,甚至连公司都制作了一个降级教程。你看到关于“你可以在Java 8上运行Java 1中的几乎所有代码”的内容了吗?存在一些小的不兼容,主要在JVM的深奥部分。但总体而言,Java仍然非常向后兼容。大约8年后,遗憾的是,这不再是事实。我对Java14和旧的Java应用程序有很多问题,这些应用程序依赖于现在已经从Java运行时中删除的功能。对于标准代码来说,是的,它仍然有效,但是有一些企业库您不能再依赖现有的。JavaFX也是如此。遗憾的是,这迫使我们在工作中考虑从Java转向Rust。实际上,这应该是正确的答案,因为升级到较新的Java版本并不完全安全。如果不使用任何jdk8功能,编译1.8和目标1.8会怎么样。行吗?