gpt4 book ai didi

Java 7 语言向后兼容性

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:35:51 25 4
gpt4 key购买 nike

简短的问题:如果我使用以前在 Java 6 中不可用的相对“次要”的 Java 7 语言功能,例如 try-muticatch block ...这是否意味着我的程序将无法在具有 JRE 6 或 JRE 的机器上运行5 安装后是按原样编译的吗?如果那是正确的,是否有一种快速生成 JRE6 .jar 可执行文件而不更改 Java 7 源代码的方法(顺便说一句,它使用的唯一 Java 7 功能是 try-multicatch block )?

最佳答案

你是对的。 Multi-catch 是 Java 7 的语言特性,无法将其编译为 Java 6(或更早版本)的 JVM 兼容字节码。

使用 Java 7 编译器,以下允许您编译 Java 6 兼容字节码:

javac -source 1.6 -target 1.6 MyJavaFile.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

(有关 warning 含义的更多信息,请参阅: https://blogs.oracle.com/darcy/entry/bootclasspath_older_source - 这与本次讨论无关)

如果您将 -source 标志更改为 1.7,您将收到:

source release 1.7 requires target release 1.7

因为...您无法将 Java 7 源代码(例如具有 Java 7 功能的源代码)编译为 Java 6 兼容字节码。

如果你用 Java 7 编译它(没有 -source-target 标志)你将得到 Java 7 字节码,它不能在

roach$ /Library/Java/Home/bin/java net.mostlyharmless.multicatch.App
Exception in thread "main" java.lang.UnsupportedClassVersionError: net/mostlyharmless/multicatch/App : Unsupported major.minor version 51.0

关于Java 7 语言向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17168184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com