0

我的问题是 Java JDK 和 JRE 是否必须兼容才能运行?

我的意思是:将来使用 JDK 版本 8 编写的 Java 应用程序会与当前的 JRE 一起使用吗?

4

3 回答 3

2

编译时可以使用交叉编译选项。这样做,就可以使用与 Java 1.1 兼容的 SDK 8 编译代码。它不会是 1.1 的高级代码,但它会运行。

于 2013-09-21T17:51:51.693 回答
1

简短的回答是否

如果您在 JDK 8 中开发应用程序并使用 JRE 7 运行它,您将收到UnsupportedClassVersionError

于 2013-09-21T17:50:01.650 回答
0

这个问题分为两部分:

  1. JDK 与 JRE
  2. 向前/向后兼容性。

JRE 是 Java 运行时环境的首字母缩写。JDK 是 Java Development Kit 的首字母缩写:一组用于开发 Java 程序的工具。JDK 还包含一个完整的 JRE。一般来说,两者之间不存在兼容性问题。但是您可能需要注意不要使用仅在 JDK 中可用的库(例如代码生成或 tools.jar)

Java 本身正在编译为前向兼容的字节码。这意味着您可以使用任何 Java 版本的字节码并使用任何较新的版本运行它。另一种方法通常不起作用,并通过使用类文件版本进行检查(“java.lang.UnsupportedClassVersionError: Test : Unsupported major.minor version 51.0”)。

然后是 Java 库,包括核心库。到目前为止,它们从未删除过任何东西,因此它们是向前兼容的。这可能会随着 Java 9 的变化而改变,其中删除了一个非常小的通常未使用的库函数。

关于向后兼容性,这可以通过将 Java 编译器设置为生成旧版本的字节码来实现。在 Java 8 之前,编译器总是能够生成最后两个主要版本的字节码。但是,您可能成功地将 Java 8 源代码编译为 Java 6,但无法运行它。当您使用仅在从来没有 Java 上可用的库时就是这种情况。对于这种情况,例如 maven animalsniffer 插件将验证当您针对旧版本进行编译时,您实际上只使用该版本中存在的库。

于 2016-11-25T14:20:31.373 回答