在与其他人的对话中,他们声称用于编译代码的 JDK 版本与用于运行编译代码的 JVM 版本无关。
这对我来说似乎很奇怪 - 从来没有 JDK 版本很重要的例子吗?功能是否始终只依赖于运行代码的 JVM,而不依赖于代码的编译方式?
https://stackoverflow.com/a/19554706/2687324谈论向后兼容性。 Java 代码是否也向前兼容?
最佳答案
不,您不一定能在旧 JRE 上运行使用新 JDK 编译的代码。已编译的类包含类文件格式的版本号;如果这比运行时预期的更新,它将拒绝加载该类。
大多数 Java 编译器都支持以旧 JRE 为目标的选项,从而生成比构建编译器时更旧的类文件格式。但是,如果您不针对旧版本的 Java 运行时库进行编译,您仍然会遇到麻烦。您的代码可能使用旧版 Java 中没有的新 API。即使您指定了较旧的目标,编译器及其当前版本的 API 也不会捕获此信息。
对于 OpenJDK 中的标准 javac
编译器,这些选项是 -target
和 -bootclasspath
。您可能还想设置 -source
选项以捕获需要支持的较新语言功能的使用,旧类文件不提供。
关于java - 用于编译代码的 JDK 版本是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29809231/