java 7语言向后兼容性
简单问题:如果我使用相对“次要”的Java7语言特性,比如try muticatch块,而这些特性以前在Java6中是不可用的。。。这是否意味着我的程序在编译后不会在安装了JRE 6或JRE 5的机器上运行?如果这是正确的,有没有一种快速的方法可以在不更改Java 7源代码的情况下生成JRE6.jar可执行文件(顺便说一句,它将使用的唯一Java 7功能是try multicatch块)?您无法将具有Java 7功能的源代码编译成Java 6.class,因为java 7语言向后兼容性,java,backwards-compatibility,Java,Backwards Compatibility,简单问题:如果我使用相对“次要”的Java7语言特性,比如try muticatch块,而这些特性以前在Java6中是不可用的。。。这是否意味着我的程序在编译后不会在安装了JRE 6或JRE 5的机器上运行?如果这是正确的,有没有一种快速的方法可以在不更改Java 7源代码的情况下生成JRE6.jar可执行文件(顺便说一句,它将使用的唯一Java 7功能是try multicatch块)?您无法将具有Java 7功能的源代码编译成Java 6.class,因为 javac -source 1.7
javac -source 1.7 -target 1.6 Test.java
产生
源版本1.7要求目标版本1.7
错误。这是因为1.7的一些特性只能用于Java7类。例如try with resources
使用了Throwable.addsupprested
方法,仅在1.7版之后可用您是正确的。Multi-catch是Java 7语言的一个特性,无法将其编译为与Java 6(或更早版本)兼容的JVM字节码
使用Java 7编译器,您可以通过以下方式编译与Java 6兼容的字节码:
javac-source 1.6-target 1.6myjavafile.java
当您尝试编译Java 7语言功能(例如,multi-catch)时,您将得到:
roach$ javac -source 1.6 -target 1.6 test.java
warning: [options] bootstrap class path not set in conjunction with -source 1.6
test.java:9: error: multi-catch statement is not supported in -source 1.6
} catch (NullPointerException | BufferOverflowException ex) {}
^
(use -source 7 or higher to enable multi-catch statement)
1 error
1 warning
(有关警告的更多含义,请参阅:
-与本次讨论无关)
如果将-source
标志更改为1.7
,您将收到:
源版本1.7要求目标版本1.7
因为。。。您不能将Java 7源代码(例如,具有Java 7功能的源代码)编译为与Java 6兼容的字节码
如果您使用Java 7编译它(没有-source
或-target
标志),您将获得无法在
roach$/Library/Java/Home/bin/Java net.mostlyharmless.multicatch.App
线程“main”java.lang.UnsupportedClassVersionError中出现异常:
net/mostlyharmless/multicatch/App:不支持的主版本。次版本
51.0