JDK 1.4和JDK 1.6有什么区别?

3
我已经使用JDK 1.4创建了项目。现在我想在我的项目中使用JDK 1.6版本。为此,需要采取哪些步骤?我的意思是,我想知道代码需要做哪些更改才能获得JDK 1.6的功能。基本上,我在谈论JDK 1.6中添加的功能。如果有人列出这些更改,那将非常有帮助。
提前感谢您的帮助。

8
JDK 1.4 和 JDK 1.6 之间的差别大约相当于 JDK 0.2。("大约"是因为浮点数舍入误差可能会导致稍微不同的结果。) - JUST MY correct OPINION
7个回答

18
最好先了解1.4和1.5之间的差异,再了解1.5和1.6之间的差异。你可以在官方网站上查看每个版本中的新功能,但以下是一个小的时间顺序表...
JDK 1.0(1996年1月23日)橡树
- 首次发布
JDK 1.1(1997年2月19日)
- AWT事件模型的重构 - 内部类添加到语言中 - JavaBeans - JDBC - RMI
J2SE 1.2(1998年12月8日)游乐场 此版本及随后的版本通过重命名回溯地更名为Java 2和版本名称“J2SE”(Java 2平台,标准版),以区别于基本平台J2EE(Java 2平台,企业版)和J2ME(Java 2平台,微型版)。
- Strictfp关键字 - 反射 - Swing API整合到核心类中 - JVM配备jit编译器 - Java插件 - Java IDL - 用于CORBA互操作性的IDL实现 - 集合框架
J2SE 1.3(2000年5月8日)山雀
- 包含Hotspot JVM - JavaSound - JNDI包含在核心库中 - Java平台调试器体系结构(JPDA) - 修改了RMI以支持与CORBA的可选兼容性
J2SE 1.4(2002年2月6日)梅林
- assert关键字 - 正则表达式 - 异常链接(允许异常封装原始下层异常)
  • Internet协议版本6(IPv6)支持
  • 非阻塞新输入/输出(NIO)
  • 日志API
  • 图像I/O API,用于读写像JPEG和PNG这样的格式的图像
  • 集成XML解析器和XSLT处理器(JAXP)
  • 集成安全性和加密扩展(JCE、JSSE、JAAS)
  • Java Web Start

J2SE 5.0(2004年9月30日)虎 [最初编号为1.5]

  • 泛型:为集合提供编译时(静态)类型安全,并消除了大多数类型转换的需要。
  • 元数据:也称为注释;允许将语言构造标记为附加数据,然后可以由元数据感知的实用程序进行处理。
  • 自动装箱/拆箱:原始类型(如int)和原始包装类之间的自动转换(如integer)。
  • 枚举:枚举关键字创建一个类型安全的、有序的值列表(例如day.monday、day.tuesday等)。以前只能通过非类型安全的常量整数或手动构建的类(类型安全枚举模式)来实现。
  • Swing:新的可皮肤化外观,称为“synth”。
  • Var args:现在可以使用类型名称后跟三个点(例如Void drawtext(string... Lines))声明方法的最后一个参数。在调用代码中,可以使用任意数量的该类型参数,然后将它们放入数组中传递给方法,或者调用代码可以传递该类型的数组。
  • 增强的for each循环:for循环语法扩展了特殊语法,用于迭代数组或任何可迭代的成员,例如标准集合类修复了先前破坏的Java内存模型的语义,该模型定义了线程通过内存相互交互的方式。
  • 自动生成RMI对象的静态存根。
  • java.util.concurrent包中的并发工具的静态导入。
  • Scanner类用于从各种输入流和缓冲区解析数据。
  • 断言
  • StringBuilder类(在java.lang包中)
  • 注释
  • Java SE 6(2006年12月11日),代号"Mustang",Sun将“J2SE”的名称更改为Java SE并从版本号中删除“.0”。Beta版本于2006年2月和6月发布,最终版本于2006年12月11日发布。当前版本是更新20。

    • 不再支持旧版Win9x。
    • 脚本语言支持:通用API用于与脚本语言集成,并内置Mozilla JavaScript Rhino集成。
    • 核心平台和Swing的性能显著提升。
    • JAX-WS JDBC 4.0支持改进Web服务支持。
    • Java编译器API:允许Java程序以编程方式选择和调用Java编译器的API。
    • 将JAXB升级到2.0版本,包括集成stax解析器。
    • 支持可插拔注释。
    • 许多GUI改进,例如在API中集成了SwingWorker、表格排序和过滤,以及真正的Swing双缓冲(消除了灰色区域效果)。

    Java SE 6更新10 从最终用户可用性方面进行了重大改进。

    • Java部署工具包,一组JavaScript函数,用于简化小程序和Java Web启动应用程序的部署。
    • Java内核,一个小型安装程序,仅包含最常用的JRE类。增强更新程序。
    • 增强版本控制和Pack200支持:不再需要服务器端支持。
    • Java Quick Starter,以改进冷启动时间。
    • 在Windows上使用Direct3D和硬件加速来提高java2D图形原语的性能。
    • 一种名为NIMBUS的新Swing外观和感觉,基于Synth。
    • 下一代Java插件:小程序现在在单独的进程中运行,并支持Web启动应用程序的许多功能。

    Java SE 6更新12

    此版本发布包括备受期待的64位Java插件(仅适用于64位浏览器),支持Windows Server 2008,并改进了Java和JavaFX应用程序的性能。

    ...........

    您可以在维基百科中查看最新更新。

    2
    请注意,此处可找到相关编程版本历史记录:http://en.wikipedia.org/wiki/Java_version_history。 (我更喜欢提供维基百科的简单链接而不是复制并粘贴) - Andreas Dolk

    7
    根据我的看法,自Java 1.4.2以来最显著的四个增强功能是:
    - 泛型 - 枚举 - 增强for循环 - 注释
    虽然还有很多其他类和API的增强,但如果你想“升级”你的代码,我建议你从使用泛型开始重构,并将标准for循环替换为增强for循环。这两种方法都可以在不进行大量代码更改的情况下清理代码(你可以删除很多代码行)并提高可读性。使用泛型可能会揭示一些隐藏的错误 ;)

    你能提供JDK 1.6代码和JDK 1.8代码之间的类似比较吗? - N V

    4
    我已经使用JDK 1.4创建了项目。现在我想在我的项目中使用JDK 1.6版本。为此,需要哪些步骤。
    实际上,你几乎不需要做什么就可以使用JDK 1.6运行JDK 1.4应用程序。在几乎所有情况下,你只需要使用JDK 1.6编译器重新编译代码,并在JDK 1.6 JVM中运行它。你可能会遇到的唯一问题是:
    - 如果你的代码将"enum"用作标识符,那么你需要将其更改为其他内容。"enum"是从Java 1.5开始的关键字。 - 如果你的代码直接依赖于Sun专有/内部类,则可能需要处理未公布的API更改。 - 你可能会发现某些官方API类或方法已被标记为弃用。 - 每个版本的API实现/行为都存在少量更改,这可能会影响你的应用程序。这些通常在升级文档中突出显示。
    一旦您的应用程序在Java 1.6上运行成功,您可以考虑何时开始使用Java 1.5语言扩展和类库中的新/增强API。
    “意味着我想知道要获取JDK 1.6功能需要更改哪些代码。”
    几乎不需要进行任何更改。但是,如果您想要或需要使用新功能,则需要更改您的代码。
    维基百科有一个摘要列出了各种Java版本中所做的最重要的更改。

    更新

    自2014年5月起,Java 6已经“终止生命周期”,Java 8已经发布了一个月左右(没有重大的早期发布号码事件)。您现在应该考虑至少转移到Java 7,可能是Java 8。

    同样的原则适用。重新编译并运行回归测试,您很可能会顺利进行。然后开始学习所有关于Java 8语言扩展的知识。



    1

    3
    除非你把 Enum 用作类名 :) - J-16 SDiZ
    在 AXIS 1.3 或 1.4 中,将枚举作为类名确实是一个问题。 - stacker
    @J-16 SDiZ - Enum作为类名不应该有问题,但在字段或方法名或包名中使用enum可能会出现问题。 - Andreas Dolk

    0

    在1.5版本中,volatile关键字的行为与C++有很大的不同,更接近于C#的行为。但这只会使代码更加安全,因此不需要进行任何代码更改。


    0

    这些幻灯片涵盖了关于1.5扩展的重要细节,并提供了代码示例。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接