简要问题:如果我使用相对“次要”的Java7语言特性,比如try-muticatch块...这是否意味着我的程序不能在编译后安装了JRE 6或JRE 5的机器上运行?如果这是正确的,那么有没有一种快速的方法可以在不更改Java7源代码的情况下生成JRE6 .jar可执行文件(顺便说一句,它唯一会使用的Java7特性就是try-multicatch块)?
发布于 2013-06-18 21:12:56
你是对的。多重捕获是Java7语言的一个特性,没有办法将其编译成与Java6(或更早版本) JVM兼容的字节码。
使用Java 7编译器,可以编译与Java 6兼容的字节码:
javac -source 1.6 -target 1.6 MyJavaFile.java
当您尝试编译Java 7语言特性时(例如,多捕获),您将得到:
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(有关warning含义的更多信息,请参阅:https://blogs.oracle.com/darcy/entry/bootclasspath_older_source -与本讨论无关)
如果将-source标志更改为1.7,您将收到:
源版本1.7需要目标版本1.7
因为..。您不能将Java 7源代码(例如,具有Java 7特性的源代码)编译为与Java 6兼容的字节码。
如果您使用Java7(没有-source或-target标志)编译它,您将得到Java7字节码,它不能在
java roach$ /
库/java/Home/bin/java net.mostlyharmless.multicatch.App
线程"main“java.lang.UnsupportedClassVersionError异常: net/mostlyharmless/multicatch/App :不支持的major.minor版本51.0
发布于 2013-06-18 20:11:19
您不能将具有Java7特性的源代码编译到Java6 .class中,因为这
javac -source 1.7 -target 1.6 Test.java生成source release 1.7 requires target release 1.7错误。这是因为1.7中的一些特性只能与Java 7类一起使用。Eg try-with-resources使用Throwable.addSuppressed方法,仅从1.7开始提供
https://stackoverflow.com/questions/17168184
复制相似问题