java 7语言向后兼容性

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

简单问题:如果我使用相对“次要”的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 -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