针对“Java 8”JDK编写的程序是否与“Java 7”JRE兼容?

时间:2013-09-21 17:43:21

标签: java compatibility

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

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

3 个答案:

答案 0 :(得分:2)

编译时可以使用cross-compilation options。这样做,就可以使用与Java 1.1兼容的SDK 8编译代码。它不是1.1的非常高级的代码,但它会运行。

答案 1 :(得分:1)

简短的回答是

如果您在JDK 8中开发应用程序并使用JRE 7运行它,那么您将获得UnsupportedClassVersionError

答案 2 :(得分:0)

这个问题分为两部分:

  1. JDK vs JRE
  2. 向前/向后兼容。
  3. JRE是Java Runtime Environment的首字母缩写。 JDK是Java Development Kit的首字母缩写:一组用于开发Java程序的工具。 JDK还包含完整的JRE。一般来说,两者之间没有兼容性问题。但您可能需要注意不要使用仅在JDK中可用的库(例如代码生成或tools.jar)

    Java本身正在编译为字节码,它是向前兼容的。这意味着您可以使用任何Java版本的字节码,并使用任何较新版本运行它。反过来通常不起作用,并使用类文件版本进行检查(" java.lang.UnsupportedClassVersionError:测试:不支持的major.minor版本51.0")。

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

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