使用最新的JRE而不是旧的Java版本,我能保证它能工作吗?
假设我有一个用Java1.5编码的Java项目,我正在使用更高版本的Java,但将目标设置为1.5 如果代码在以后的Java中编译和测试正常,那么我是否可以保证它在实际的Java1.5运行时也能正常工作 或者我需要安装一个我所依赖的所有JRE版本才能确定 JRE中的bug会发生什么?如果在1.5中有一个bug,则在1.6中修复。如果我使用Java1.6,目标设置为1.5,这个bug会影响我吗使用最新的JRE而不是旧的Java版本,我能保证它能工作吗?,java,Java,假设我有一个用Java1.5编码的Java项目,我正在使用更高版本的Java,但将目标设置为1.5 如果代码在以后的Java中编译和测试正常,那么我是否可以保证它在实际的Java1.5运行时也能正常工作 或者我需要安装一个我所依赖的所有JRE版本才能确定 JRE中的bug会发生什么?如果在1.5中有一个bug,则在1.6中修复。如果我使用Java1.6,目标设置为1.5,这个bug会影响我吗 在现实场景中,这是我需要考虑的问题吗 假设您将target和source设置为1.5,那么您只需担心我能
在现实场景中,这是我需要考虑的问题吗 假设您将target和source设置为1.5,那么您只需担心我能想到的三种主要情况:
- 您使用的是内部
类,这些类可能已经更改或消失(或者以某种方式依赖于其他内部行为)com.sun
- 您依赖的是后来版本中修复的bug行为
- 您遇到了向后不兼容的更改(虽然很少见,但已经知道会发生这种情况) JRE中的bug会发生什么?如果在1.5中有一个bug,则在1.6中修复。如果我使用Java1.6,目标设置为1.5,这个bug会影响我吗
我仍然主张在发布新版本的JVM之前对其进行测试,但根据我的经验,实际上这通常不是一个问题。所有新的JRE实现都是以保持兼容性的方式进行的,因此答案是是的。 但是,我建议您测试您的应用程序,因为可能存在与您的项目非常相关的问题。总结您的问题: JRE向后兼容吗?JDK向前兼容吗 简而言之,答案是肯定的 说明: JDK不向后兼容。即 JDK5代码不能在JVM4上运行,也不能在JVM5上运行JDK6 然而,JRE是向后兼容的,因为组织通常只写一次,执行多次 原因: 随着JRE变得越来越复杂,具有更智能的堆管理、垃圾收集、线程处理等功能,客户会倾向于使用新版本的JVM 错误
如果您将更高版本的JVM与更早的“目标”一起使用,JVM中存在的真正错误将停止这种行为。这是因为
target=prev\u version
实际上并不完全调用以前的JVM。它只拾取增量并以不同的方式处理代码。然而,如果这是在新的JVM中有意引入的特性(比如6),那么切换到target=1.5实际上会回退到beahvior 1.5
希望这能在一定程度上澄清您的疑问。我遇到了以下问题:java7在现有接口中添加了新方法。即使在将其设置为java6兼容之后,编译器告诉我必须实现缺少的方法(用
@Override
注释它)。这样做之后,java6告诉我它不知道新的覆盖方法。但也许这是日食唯一的问题。。。