首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java 7语言向后兼容性

java 7语言向后兼容性
EN

Stack Overflow用户
提问于 2013-06-18 19:54:29
回答 2查看 4K关注 0票数 8

简要问题:如果我使用相对“次要”的Java7语言特性,比如try-muticatch块...这是否意味着我的程序不能在编译后安装了JRE 6或JRE 5的机器上运行?如果这是正确的,那么有没有一种快速的方法可以在不更改Java7源代码的情况下生成JRE6 .jar可执行文件(顺便说一句,它唯一会使用的Java7特性就是try-multicatch块)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-18 21:12:56

你是对的。多重捕获是Java7语言的一个特性,没有办法将其编译成与Java6(或更早版本) JVM兼容的字节码。

使用Java 7编译器,可以编译与Java 6兼容的字节码:

javac -source 1.6 -target 1.6 MyJavaFile.java

当您尝试编译Java 7语言特性时(例如,多捕获),您将得到:

代码语言:javascript
复制
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

票数 8
EN

Stack Overflow用户

发布于 2013-06-18 20:11:19

您不能将具有Java7特性的源代码编译到Java6 .class中,因为这

代码语言:javascript
复制
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开始提供

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17168184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档