在不同的JRE上运行Java类文件的后果?

Bob*_*mar 3 java java1.4

在JRE 1.6或1.5上运行JDK 1.4.2中编译的Java类文件有什么后果?

coo*_*ird 6

Java SE 6的兼容性页面列出的Jave SE 6对Java SE 5.0的兼容性.此外,还有一个指向J2SE 5.0中不兼容性的链接(自1.4.2开始).通过查看这两个文档,应该可以找出在JDK 1.4.2和Java SE 6下编写的程序是否存在任何不可通行性.

就Java类文件的二进制兼容性而言,Java SE 6兼容性页面具有以下内容:

除了下面列出的不兼容性之外,Java SE 6向上与J2SE 5.0二进制兼容 .除了注意到的不兼容性之外,使用5.0版编译器构建的类文件将在JDK 6中正确运行.

因此,通常,正如workmad3所指出的,在较旧的JDK上编译的Java类文件仍将与最新版本兼容.此外,正如Desty所述,对API的任何更改通常都会被弃用而不是删除.

源兼容性部分:

不推荐使用的API是仅支持向后兼容性的接口.除非使用-nowarn命令行选项,否则只要使用其中一个,javac编译器就会生成警告消息.建议修改程序以消除使用已弃用的API,尽管目前没有计划从JVMDI和JVMPI除外的系统中完全删除此类API.

Java SE 6性能白皮书中列出了很多性能改进.


And*_*rov 5

Java类是向前兼容的,例如,使用1.5编译器生成的类将成功加载并执行, JRE 1.6 没有任何问题.通常,今天java编译器生成的类将与未来的JRE兼容(例如Java7)

反向不成立:你不能在旧的JRE(1.3,1.4等)上运行1.6生成的类.