新版本的 java 可以在旧版本上运行吗?

时间:2021-01-22 17:47:48

标签: java backwards-compatibility forward-compatibility

我对java是向后兼容还是向前兼容有疑问? 另外,我们可以在具有 JDK 8 的 MAC 上运行在 JDK 11 Windows 中编写的 Java 字节码而不会出现任何复杂情况吗?我正在尝试理解平台独立性的概念。

2 个答案:

答案 0 :(得分:2)

Java 字节码向前兼容。即,较新的 JVM 可以运行为较旧的 JVM 编译的 Java 字节码。反之则不然,程序将因“无法识别的类文件版本”错误而失败。

如果你想反过来,你可以强制一个新的 JDK 为旧的 JVM 编译代码(通过设置语言级别),只要你不使用任何对它来说太新的语法那个版本,它应该可以工作。 但是请注意,这并不能阻止代码依赖于更高版本 JDK 中引入的类/方法。如果您也想从这个角度确保代码向后兼容,您将需要第三方工具,例如 Animal Sniffer

答案 1 :(得分:0)

简短回答:是的。这才是重点。您的古老字节码,即使来自 Java 1,也将在 Java 11 下运行。

更详细的回答:有几个类现在终于从标准库中删除了。但很可能你没有使用它们。

编辑:我似乎误读了您的问题。不,你不能在Java 8下运行用Java 11编译的代码。字节码版本增加了,Java 8会拒绝运行。

相关问题