用于编译代码的JDK版本是否重要?

时间:2015-04-22 21:30:23

标签: java jvm

在与其他人的对话中,他们声称用于编译代码的JDK版本与用于运行编译代码的JVM版本无关。

这对我来说似乎很奇怪 - 从来没有JDK版本重要吗?功能总是仅依赖于代码运行的JVM,而不依赖于代码的编译方式吗?

https://stackoverflow.com/a/19554706/2687324讨论了向后兼容性问题。 Java代码是否也转发兼容?

1 个答案:

答案 0 :(得分:5)

不,您无法在旧的JRE上运行使用新JDK编译的代码。编译类包含类文件格式的版本号;如果这比运行时期望的更新,它将拒绝加载该类。

大多数Java编译器都支持一个选项来定位较旧的JRE,生成比构建编译器更旧的类文件格式。但是,如果您还不能针对较旧版本的Java运行时库进行编译,则仍会遇到麻烦。您的代码可能使用旧版Java中没有的新API。即使您指定了较旧的目标,编译器及其当前版本的API也不会捕获它。

对于OpenJDK中的标准javac编译器,这些选项为-target-bootclasspath。您可能还需要设置-source选项以捕获需要支持较旧的类文件的新语言功能的使用。

相关问题