字节码是否取决于创建它所使用的Java版本?
2- 进行后移可能也会有问题。例如:1)依赖本地代码支持的事物很可能需要您实现该本地代码支持。2)当您在旧JVM上运行代码时,您很可能需要将任何后移的JAR文件放到bootclasspath中。
字节码是否取决于创建它所使用的Java版本?
通常是的。但是,通过使用 -source、-target和-bootclasspath选项,可以使用 1.7+ 编译器创建与 Java 1.1 兼容的二进制文件。
首先,所有的Java文件都有一个版本字节在类头中。较旧的JVM无法加载具有较新版本的类,无论它们具有什么功能。
JVM字节码在主要JVM版本之间具有向前兼容性,但不具备向后兼容性。然而,要获取最佳信息,您需要阅读JVM发布说明,因为它们通常会指出字节码的向后兼容性。
编辑澄清,因为这引起了评论中的讨论
JVM字节码具有向前兼容性,这意味着从一个JVM中提取的字节码可与较新版本的JVM一起运行。例如,您可以将1.4 JVM中的字节码运行在Java 5或Java 6 JVM中(除了Andrew所指出的任何回归问题)。
JVM字节码在不同的JVM之间不具备向后兼容性,这意味着在以前的JVM版本中不能保证来自某个JVM的字节码能够正常工作,就像尝试在1.4.2 JVM中运行为Java 6编译的代码一样。
字节码是否取决于创建它的Java版本?
是的。
如果我在最新的JDK中编译了一个Java文件,旧的JVM能否运行.class文件?
不行。但相反的情况可能会起作用。您可能会喜欢查看这个有趣的线程,它讨论了Java的后移植。
javac -target 1.4 SomeClass.java
显然源代码应该是1.4兼容的。
如果您不使用高版本JVM中可用的功能,则可以编译与旧版本JVM兼容的类。
javac -target 1.5 MyJava.java
javac -target 1.4 MyJava.java