Java字节码是否与不同版本的Java兼容?

时间:2009-08-12 15:31:41

标签: java jvm compatibility bytecode java1.4

如果我使用Java 5代码将应用程序编译成字节码,那么生成的.class文件是否能够在Java 1.4下运行?

如果后者可以工作并且我正在尝试在我的Java 1.4应用程序中使用Java 5框架,那么是否应该注意什么?

3 个答案:

答案 0 :(得分:6)

都能跟得上! .class个文件仅向前兼容。 Java 5引入了新的类文件属性和格式更改,以处理Varargs,枚举和泛型。处理这些时,Java 4会失败。

但是,javac上有一个不受支持的-target jsr14选项可以为某些Java 5语言功能生成与JDK 1.4兼容的字节码。

此外,还有一些项目(例如RetroweaverRetrotranslator)将Java 5类文件转换为Java 4文件。

编辑:我找到了这个好资源:Using Java 5 language features in earlier JDKs

答案 1 :(得分:3)

没有。您只能向上移动 - Java 1.4字节码将适用于Java 5运行时。但是,如果您没有使用Java 1.4中没有的任何功能,则可以使用-target-source options of javac进行编译。

如果要使用Java 5编写可在Java 4上运行的应用程序,则不能使用任何features that weren't present before Java 5

答案 2 :(得分:2)

不,他们不是。 .class文件只能向前兼容。

Java5框架意味着您的库可能正在使用与1.4环境不兼容的泛型或注释。您必须评估在1.5 JVM下运行1.4应用程序的风险,以便能够使用您需要的框架。

总的来说,我发现移动到1.5大部分是无痛的,但需要进行勤奋的测试。