Java 是JDK吗;“向上”;或;“向后”;兼容的?
向后二进制兼容性(或向下兼容性)-使用旧版本库API构建的客户端在新版本上运行的能力() 向上二进制兼容性(或向前兼容性)-使用新版本库API构建的客户端能够在旧版本上运行() Sun关于JDK(和太)的通用文档描述了JDK的兼容性,如下所示: JDK 5.0与Java 2 SDK v1.4.2兼容,但以下列出的不兼容除外。这意味着,除了注意到的不兼容之外,使用1.4.2版编译器构建的类文件将在JDK 5.0中正确运行 我认为文档作者在这句话中混淆了术语“向上”和“向后”的兼容性。他们描述了“向后”兼容性,但称此功能为“向上”兼容性 这是一个打字错误、错误还是有意使用的术语?Java 是JDK吗;“向上”;或;“向后”;兼容的?,java,backwards-compatibility,binary-compatibility,forward-compatibility,Java,Backwards Compatibility,Binary Compatibility,Forward Compatibility,向后二进制兼容性(或向下兼容性)-使用旧版本库API构建的客户端在新版本上运行的能力() 向上二进制兼容性(或向前兼容性)-使用新版本库API构建的客户端能够在旧版本上运行() Sun关于JDK(和太)的通用文档描述了JDK的兼容性,如下所示: JDK 5.0与Java 2 SDK v1.4.2兼容,但以下列出的不兼容除外。这意味着,除了注意到的不兼容之外,使用1.4.2版编译器构建的类文件将在JDK 5.0中正确运行 我认为文档作者在这句话中混淆了术语“向上”和“向后”的兼容性。他们描述了“向
JDK是“向上”还是“向后”兼容?根据wiki的定义,JDK是向下兼容的。它应该是向后兼容的。JDK是向上兼容的-新版本可以在旧版本上运行JDK是向后兼容的,即符合1.4.2规范的字节码将在Java 5 JVM上运行是向后兼容的。由Java1.4.2构建的代码将在1.5和6虚拟机上运行。JDK编译器不向后兼容。因此,java 1.5无法编译代码以在1.4.2上运行。注意,对于向后兼容的东西,必须有向前兼容的对应物(有意或无意)。例如:DVD读取器是向后兼容CD还是向前兼容DVD读取器 在这种情况下,这取决于您是查看编译器(或它生成的字节码)还是虚拟机 编译器不向后兼容,因为使用Java5 JDK生成的字节码不会在Java1.4 jvm中运行(除非使用
-target 1.4
标志编译)。但是JVM是向后兼容的,因为它可以运行较旧的字节码
所以我猜他们从Javac的角度考虑兼容性(因为它是JDK特有的部分),这意味着生成的字节码可以在JVM的未来版本中运行(这与JRE更相关,但也绑定在JDK中)。 简言之,我们可以说:
- JDK(通常)是向前兼容的
- JRE(通常)向后兼容
顺便说一句,将向后/向前和向下/向上配对,而不是将它们混合在一起,不是更有意义吗?仅向后。Forward compat(“优雅地接受用于其自身更高版本的输入”)要求1.5 JVM能够运行1.6编译代码,但它不能 向后需要“如果它可以处理旧设备生成的输入”,这是正确的,因为1.6 JVM可以运行1.5编译代码 JDK/JRE的每个版本都与Java字节码的一个版本一致。每个编译器生成特定字节码版本的代码。每个JVM都理解特定字节码版本的一个版本和所有早期版本
当JVM加载一个类时,它会检查字节码版本,如果它大于JVM的最新理解版本,则会得到一个错误。(ClassVersionError或其他内容)。扩展答案以包括最新的Java 引用Oracle未注明日期的页面: 兼容性是一个复杂的问题。本文档讨论三种类型 与Java版本相关的潜在不兼容性 站台:
(没有序言,只是一个不兼容列表。)BTW:您应该真正关注Java 6,因为Java 5.0已经下线一段时间了。文档中也将Java 6描述为“向上二进制兼容”。仅对于向后不兼容:源代码和字节码兼容性是不同的。