我对java是向后兼容还是向前兼容有疑问?另外,我们可以在具有 JDK 8 的 MAC 上运行用 JDK 11 Windows 编写的 java 字节码而没有任何复杂性吗?我试图理解平台独立性的概念。
问问题
975 次
2 回答
2
Java 字节码是前向兼容的。即,较新的 JVM 可以运行为较旧的 JVM 编译的 java 字节码。反之亦然,程序将因“无法识别的类文件版本”错误而失败。
如果您想反其道而行之,可以强制较新的 JDK 为较旧的 JVM 编译代码(通过设置语言级别),并且只要您不使用任何对该版本来说太新的语法,它应该工作。但是请注意,这并不妨碍代码依赖于以后 JDK 中引入的类/方法。如果你想确保代码从这个角度也向后兼容,你需要像Animal Sniffer这样的第三方工具。
于 2021-01-22T17:53:12.057 回答
0
简短的回答:是的。这才是重点。您的古老字节码,即使来自 Java 1,也将在 Java 11 下运行。
更详细的答案:现在终于从标准库中删除了一些类。但很可能你没有使用它们。
编辑:我似乎误读了你的问题。不可以,Java 8 下无法运行使用 Java 11 编译的代码。字节码版本增加了,Java 8 将拒绝运行。
于 2021-01-22T17:51:20.250 回答