使用JDK 7进行编程是否允许应用程序在JRE 6上运行?

时间:2014-01-26 11:16:53

标签: java eclipse

我在Eclipse中编程。我从不改变Eclipse的默认编译设置或其他任何内容。

如果我的计算机上安装了JDK 7。如果我编译的Runnable JAR在较旧的JRE上运行有任何问题,假设较旧的JRE支持我的所有程序功能吗?

例如,如果我在Eclipse中编写一个应用程序,并安装了最新的JDK - 该程序是否会在较旧的JRE上运行时出现问题?

如果答案是"是" - 我怎么能改变这个?如何允许我的程序在比我的JDK更旧的JRE上运行?感谢

2 个答案:

答案 0 :(得分:5)

您的代码只能在JRE 6上运行,您可以为JRE 6编译它。检查您的编译器设置(Project-> Properties-> Java Compiler)并确保您为Java 6编译,否则用户将获得UnsupportedClassVersionError如果他们没有安装Java 7。

您还必须确保不使用任何Java 7功能(例如java.nio.Path),或安装Java 6 JDK并使用它来编译您的应用程序,否则您将丢失方法/类异常在Java 6上运行应用程序时(使用JDK 6时会出现编译时错误)。

答案 1 :(得分:2)

Eclipse使用的Java运行时不必与项目使用的相同。您可以在项目的属性中设置项目的运行时:

http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2FgettingStarted%2Fqs-ProjectConfiguration.htm

Java 7向后兼容,这意味着较旧的Java程序将在此版本的Java中运行。但是,Java版本永远不会向前兼容。这意味着用Java 7编写的程序不一定用Java 6编译,用Java 6编写的程序也不一定用Java 5编译。这是因为Java 7包含Java 6不包含的功能,比如switch语句中的字符串,以及Java 6包含Java 5不包含的功能,如脚本语言支持(有关概述,请参阅https://en.wikipedia.org/wiki/Java_version_history)。

缺乏向前兼容性意味着在较新版本的Java中编译的Java程序将无法在较旧版本的Java运行时上运行。 java编译器专门保护带有版本标识符的编译java类文件,以便在较新版本的Java中编译时不运行这些类。

如果您小心避免使用Java 7功能,可以编写Java 7中的Java程序,该程序将在Java 6中编译和运行。但是如果您知道您的程序需要在Java 6中运行,那么最好设置项目的运行时到Java 6。