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

Can newer versions of java run on older versions?

我有疑问 java 是向后兼容还是向前兼容? 另外,我们可以 运行 java 字节码写在 JDK 11 Windows 上 MAC 有 JDK 8 没有任何并发​​症?我正在尝试理解平台独立性的概念。

简短回答:是的。这才是重点。你古老的字节码,即使从 Java 1,也会 运行 在 Java 11.

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

编辑:我好像误读了你的问题。不行,你不能运行用Java11在Java8下编译的代码。字节码版本增加了,Java8会拒绝运行它。

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

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