Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java语言在其历史上是否保持了源代码向后兼容性?_Java_Backwards Compatibility - Fatal编程技术网

Java语言在其历史上是否保持了源代码向后兼容性?

Java语言在其历史上是否保持了源代码向后兼容性?,java,backwards-compatibility,Java,Backwards Compatibility,Java在开发过程中是否始终保持源代码向后兼容 更准确地说:给定两个Java版本X和Y,X

Java在开发过程中是否始终保持源代码向后兼容

更准确地说:给定两个Java版本X和Y,X 或者,是否只有JVM级别的兼容性:例如,为JVM 1.2编译的类可以由JVM 5运行


如果可以在Java5(或6或7)上运行Java2代码,那么我必须遵循哪些确切步骤?直接用Java5编译器编译?使用Java 2编译器编译并在JVM 5上运行?

启动时,Java 1.5
enum
成为保留字。因此,任何包含
enum
的Java1.4源代码都会从1.5开始被破坏您始终可以使用较新版本的JDK运行,而不是用于编译的版本。另一种方法是不可能的(除非使用
-target
参数编译)


您可能需要阅读(特别是交叉编译选项部分),其中解释了目标参数和默认行为,据我所知JVM是向后兼容的。用JDK1编译的类将在最新的JRE7中工作。
图书馆绝对不是100%兼容的。有些方法已被弃用(随后被删除)。有些类以(通常)微妙的方式改变了行为,这将导致程序的行为不同。

Sun和现在的Oracle在向后兼容Java方面一直非常谨慎

二进制兼容性:您应该能够在新版本上运行使用旧版本编译的Java代码,而无需修改。然而,可能存在一些小的不兼容

源代码兼容性:最初为较旧的JDK版本编写的代码应该总是在不修改的情况下使用较新的Java编译器进行编译,但存在一些小的不兼容性。其中一个是Java5中添加的
enum
关键字;在旧版本的Java上,
enum
是有效的标识符,但在Java 5上不是。另外,从默认包导入类也被删除了(我认为是从Java1.4开始的)。所以你不能这样做:

import SomeClassName;
在Java1.4或更高版本上

在每个JDK版本的文档中都有一个关于与以前版本向后兼容的文档,其中列出了详细信息


Java通常与以前的版本兼容,但无论如何,迁移可能会有很多问题。
有关详细信息,请参阅我的文章about

您可以在此处查看Java(Jre)库类的向后兼容性分析:

该报告由该工具生成


同样的事情发生在1.4中的
assert
上。可能还有其他的例子。有什么东西被完全删除了吗?我知道他们喜欢贬低东西,但我想不出有什么东西是真的被拿走了。是的:)在JDK1和1.1中,这个方法被错误地称为“getDelege”。然后它被弃用并最终被删除:)(想想看,我没有验证它是否被删除,也许它仍然在那里……)1.7文档仍然列出它。当然不赞成,但仍然存在。:)不,我的1.7安装仍然有它-这真的表明,作为一个“有一个新的更好的方法在那里”的注释,弃用功能是完全无用的。有趣的琐事:谢谢你的快速回答。我有点不确定我应该接受哪一个,因为有几个答案提供了信息。我必须选一个。