较新的JRE版本可以运行使用较旧的JDK版本编译的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不断发展,不仅仅是称为“Java”的语言,而且还是JVM(Java虚拟机)。 我仍然拥有十多年前的源代码,如最新的JVM所预期的那样仍然有效。

如果您想要定位一个Java 5 VM,那么您可以使用Java 8 SDK工具来实现这一目标。 您可以最终指定您希望支持的目标虚拟机,只要您记住第5版虚拟机可能不支持第8版虚拟机的所有function。

我刚刚testing了用Java 5编写的代码与新的Java 8运行时相关的代码,并且所有代码都按预期工作,所以即使我们现在拥有更强大的语言和运行时,我们仍然可以继续使用过去的投资。 仅仅这样,Java就成为公司很好的开发select。

正如已经回答,你大多是安全的, 大多数产品和第三方图书馆将只是工作。 但是,在确实存在二进制不兼容的情况下,确实存在非常罕见的情况。

版本之间Oracle Java不兼容的官方列表:

  • 自Java SE 7起在Java SE 8中
  • 自Java SE 6起在Java SE 7中
  • 自Java SE 5.0起在Java SE 6中
  • 自Java SE 1.4.2起在Java SE 5.0中

对图书馆的补充评论:

一个合理的经验法则是为您的软件目标的JRE版本使用库的最新稳定版本。 显然你会发现这个规则有很多例外,但总的来说,公共库的稳定性通常会随着时间的推移而增加。

当改变版本的依赖关系时,必须考虑到API自然的兼容性版本控制

再次,最stream行的依赖关系将有网页,这些信息应该是可用的。

但是如果你使用的东西比较模糊,那么你可以看出哪些JRE是编译的依赖关系中的类。

关于如何找出课程版本,这是一个很好的答案 。 您可能需要先解压缩JAR文件。