在与其他人的对话中,他们声称用于编译代码的JDK版本与用于运行编译代码的JVM版本无关.
这对我来说似乎很奇怪 - 从来没有JDK版本重要吗?功能是否始终仅依赖于运行代码的JVM,而不依赖于代码的编译方式?
/sf/answers/1368829451/讨论了向后兼容性.Java代码是否也向前兼容?
不,您不一定要在旧的JRE上运行使用新JDK编译的代码.编译类包含类文件格式的版本号; 如果这比运行时期望的更新,它将拒绝加载该类.
大多数Java编译器都支持一个选项来定位较旧的JRE,生成比构建编译器更旧的类文件格式.但是,如果您还不针对旧版本的Java运行时库进行编译,则仍会遇到麻烦.您的代码可能使用不在旧版Java中的新API.即使您指定较旧的目标,编译器及其当前版本的API也不会捕获此信息.
对于javacOpenJDK中的标准编译器,这些选项是-target和-bootclasspath.您可能还希望设置-source选项以捕获需要支持旧类文件不提供的较新语言功能的使用.
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |