Java Versions

31 Mar 2025 | 12 分钟阅读

JDK Alpha 和 Beta (1995)

Java Alpha 和 Beta 是最早发布的版本,但它们具有高度不稳定的 API 和 ABI。提供的 Java 网页浏览器名为 WebRunner。

Java 最早的公开版本是 1995 年的 JDK Alpha 和 Beta。由于其极其不稳定的 ABI 和 API,它们不适合生产使用。这些版本还包含 WebRunner,一个最小化的 Java 网页浏览器,展示了 Java 在 Web 开发方面的早期潜力。尽管存在最初的缺点,但这些版本为 Java 的进一步发展和扩展奠定了基础。

JDK 1.0 (1996 年 1 月 23 日)

这是 Java 的第一个稳定发布版本。它的代号是 Oak。JDK 的第一个稳定版本是 JDK 1.0.2,它被称为 Java 1。

在 JDK 1.0.1 之前,private 和 protected 关键字可以一起使用,以创建另一种形式的保护,主要用于限制方法或变量的子类。在 JDK 1.0.2 中,此功能已被移除。

JDK 1.1 (1997 年 2 月 19 日)

此版本包含了一些新增功能。例如:

  • 内部类概念
  • JavaBeans
  • JDBC
  • RMI
  • AWT 事件模型被彻底重塑。
  • 反射(仅支持内省,运行时不支持修改)。
  • Symantec 为 JavaSoft 生产的 Microsoft Windows 平台上的 JIT(Just-In-Time)编译器
  • 来自 Taligent 的国际化和 Unicode 支持。
  • Java Foundation Classes (JFC/Swing):引入了 Swing 图形用户界面工具包。
  • JDK 1.1 引入了 JAR 文件格式,它允许将多个文件捆绑到一个归档中,从而更方便地分发和部署 Java 应用程序和库。
  • 引入了 JNDI,为访问不同的命名和目录服务(如 LDAP、DNS 和 NIS)提供了一个统一的接口。
  • JDK 1.1 通过引入包括数字签名、证书和访问控制机制在内的综合安全架构,增强了 Java 的安全功能。

J2SE 1.2 (1998 年 12 月 8 日)

它的代号是 Playground。这是首次被称为 J2SE(Java 2 Platform, Standard Edition)。它取代了 JDK,以区分 J2EE(Java 2 Platform, Enterprise Edition)和 J2ME(Java 2 Platform, Micro Edition)。这是一个非常重要的 Java 版本,因为它将 Java 平台的大小增加了两倍,达到 59 个包中的 1520 个类。

此版本包含了一些新增功能。例如:

  • Java 插件。
  • Java IDL,一个用于 CORBA 互操作的 IDL 实现。
  • 集合框架。
  • Swing 图形 API 已集成到核心类中。
  • Sun 的 JVM 首次配备了 JIT 编译器。
  • J2SE 1.2 中的 JNDI 得到了进一步增强,以提供对目录服务和命名系统的更好支持,使 Java 应用程序更容易与企业级服务交互。
  • J2SE 1.2 引入了 Java 2D API,它提供了强大的图形功能集,用于渲染 2D 形状、文本和图像。
  • J2SE 1.2 中引入了 Java Sound API,它提供了一种平台无关的方式来处理音频数据和设备。该 API 使开发人员能够将音频播放、录制和处理集成到他们的 Java 应用程序中。
  • J2SE 1.2 中的 JNDI 得到了进一步增强,以提供对目录服务和命名系统的更好支持,使 Java 应用程序更容易与企业级服务交互。
  • J2SE 1.2 中引入了 JAAS,为 Java 应用程序中的身份验证和授权实现提供了一个框架。

J2SE 1.3 (2000 年 5 月 8 日)

它的代号是Kestrel。此版本包含了一些新增功能。例如:

  • 包含 HotSpot JVM。
  • RMI 已修改为支持与 CORBA 的可选兼容性。
  • JNDI(Java 命名和目录接口)。
  • 包含 Java 平台调试器架构 (JPDA)。
  • JavaSound。
  • 合成代理类。
  • Java 加密扩展 (JCE)

J2SE 1.4 (2002 年 2 月 6 日)

它的代号是Merlin。这是第一个根据 Java Community Process 发布 Java 平台。

此版本包含了一些新增功能。例如:

  • 改进的库。
  • 包含 Perl 正则表达式。
  • 提供异常链(它允许一个异常封装原始的低级异常)。
  • IPv6 支持(Internet Protocol version 6)。
  • 日志 API(在 JSR 47 中指定)。
  • 用于读取和写入 JPEG 和 PNG 等格式图像的 Image I/O API。
  • 集成了 XML 解析器和 XSLT 处理器。
  • 集成了安全和加密扩展(JCE、JSSE、JAAS)。
  • J2SE 1.4 引入了 NIO API,它为 Java 应用程序中的 I/O 操作提供了更具可伸缩性和效率的机制。
  • J2SE 1.4 包括 Java Web Start,这项技术允许 Java 应用程序从 Web 浏览器或桌面部署和启动,而无需手动安装。
  • J2SE 1.4 引入了 JMX API,它提供了一种标准化的方法来监控和管理 Java 应用程序和资源。

Java 1.4 的支持和安全更新于 2008 年 10 月结束。

J2SE 5.0 (2004 年 9 月 30 日)

它的代号是 Tiger。最初编号为 1.5,这仍然是内部版本号。因此,它被改为 5.0,以“更好地反映 J2SE 的成熟度、稳定性、可伸缩性和安全性”。此过程也是根据 Java Community Process 发布的。

Java 5.0 的支持和安全更新于 2009 年 11 月 3 日结束,但付费 Oracle 客户一直可以获得更新直到 2015 年 5 月。

J2SE 5.0 添加了一些重要的语言新特性

  • 它为集合提供了编译时(静态)类型安全,消除了大多数类型转换的需要。
  • 使用元数据或注解。
  • 自动装箱/拆箱。
  • 枚举。
  • 增强的 for 循环。
  • 多线程 Java 程序的执行语义得到改进。
  • 静态导入。

标准库也有一些改进

  • RMI 对象的自动存根生成。
  • Swing: 它提供了简约的外观和感觉。
  • java.util.concurrent 包中的并发实用程序。
  • Scanner 类用于解析各种输入流和缓冲区的数据。
  • Java 5 是 Java 官方支持 Microsoft Windows 9x 系列(Windows 95、Windows 98、Windows ME)的最后一个版本。
  • Windows Vista 是 J2SE 5 支持的最后一个 Windows 版本,于 2009 年 10 月结束支持。
  • 泛型:J2SE 5.0 引入了泛型,允许开发人员通过在编译时指定集合可以包含的对象类型来编写类型安全且更简洁的代码。这有助于提高代码的清晰度、可读性和可维护性。
  • 增强的 for 循环 (for-each):增强的 for 循环,也称为 for-each 循环,为遍历集合和数组提供了更简单、更易读的语法。它使代码更具表现力,并减少了循环结构中出错的可能性。
  • 并发实用程序:J2SE 5.0 引入了 java.util.concurrent 包,提供了高级并发实用程序,如 Executors、ThreadPoolExecutor 和 Concurrent collections。这些实用程序简化了多线程应用程序的开发,并提高了可伸缩性和性能。
  • Swing 外观:J2SE 5.0 为 Swing 组件提供了新的“Ocean”外观,提供了一种现代、简化的外观,提高了 Java GUI 应用程序的视觉吸引力。

Java 5 是 Java 官方支持 Microsoft Windows 9x 系列(Windows 95、Windows 98、Windows ME)的最后一个版本。

Windows Vista 是 J2SE 5 支持的最后一个 Windows 版本,于 2009 年 10 月结束支持。

Java 5.0 是 Apple Mac OS X 10.5 (Leopard) 上默认安装的 Java 版本。可以安装 Java 6。

Java SE 6 (2006 年 12 月 11 日)

它的代号是 Mustang。此版本发布后,Java 将名称从 J2SE 更改为 Java SE,并删除了版本号后的 .0(零点)。

此版本包含了一些新增功能。例如:

 

  • 不再支持旧的 Win9x 版本。
  • 脚本语言支持。
  • 用于与脚本语言紧密集成的通用 API。
  • 改进的 Web 服务支持。
  • JDBC 4.0 支持。
  • 使用 Java 编译器 API 以编程方式调用 Java 编译器。
  • Java 编译器 API 增强。
  • Java SE 6 引入了对 64 位平台的官方支持。
  • Java SE 6 包含了对桌面集成的增强,提供了对本地外观的更好支持,并改善了与主机操作系统桌面环境的集成。

Java 6 发布后,Sun 发布了许多更新来修复错误。

Java SE 7 (2011 年 7 月 28 日)

它的代号是 Dolphin。它于 2011 年 7 月 7 日发布,但于 2011 年 7 月 28 日提供给开发者。

此版本包含了一些新增功能。例如:

  • JVM 支持动态语言。
  • 压缩的 64 位指针。
  • switch 语句中加入了 String。
  • try 语句中的自动资源管理。
  • 数字字面量中允许使用下划线。
  • 二进制整数字面量。
  • 改进的类型接口,用于创建通用实例。(也称为菱形运算符 <>)
  • 改进的捕获和抛出。(捕获多个异常并用改进的类型检查重新抛出)
  • 提供了 Java 部署规则集。
  • 除了自动资源管理,Java SE 7 还引入了 try-with-resources 语句,通过在 try 块结束时自动关闭流和连接等资源,简化了资源管理。
  • Java SE 7 引入了 Fork/Join 框架,为任务的并行和并发处理提供了支持,这对于实现分治算法特别有用。
  • Java SE 7 引入了 NIO.2 API,也称为“JSR 203:Java 平台的更多新 I/O API”,它为文件 I/O 操作、异步 I/O 和文件系统操作提供了增强支持。

从 2012 年 4 月到 Java 8 发布之前,它是 java.com 上默认的下载版本。

Java SE 8 (2014 年 3 月 18 日)

它的代号是Spider。尽管代号已不再使用,但 Spider 这个代号在 Java 开发者中很常见。

它包含了一些为 Java SE 7 提出的,但添加到 Java SE 8 中的功能。

  • Lambda 表达式的语言级支持。
  • 允许开发人员将 JavaScript 代码嵌入到应用程序中。
  • Java 类型注解。
  • 提供了日期和时间 API。
  • 可重复注解。
  • JavaFX 应用程序的启动。
  • 移除了永久代。
  • Java SE 8 包含了 Nashorn JavaScript 引擎,一个现代化的 JVM JavaScript 引擎。

Java SE 8 不支持 Windows XP,但在 JDK 8 更新 25 之后,我们可以在 Windows XP 下安装和运行它。

从 2014 年 10 月开始,Java 8 被设置为 java.com 的默认下载版本。

Java SE 9 (2017 年 9 月 21 日)

2016 年,Oracle 讨论了一些将在 Java 9 中发布的功能。人们希望 Java 9 能更好地支持 GByte 级别的堆、更好的原生代码集成、不同的默认垃圾回收器和自适应调整的 JVM。Java 9 的发布被推迟了很多次,最终于 2017 年 9 月 21 日发布。

它包含了一些特定功能

  • JDK 的模块化(项目 Jigsaw)。
  • 提供了货币和汇率 API。
  • 与 JavaFX 的紧密集成。
  • Java 实现的响应式流。
  • 更多并发更新。
  • 提供了 Java Linker。
  • 自动缩放和尺寸调整。
  • Java SE 9 引入了现有代码库迁移到 Project Jigsaw 引入的模块系统的路径。
  • Java SE 9 包含了对垃圾回收系统的增强,包括对 G1 垃圾回收器的改进以及像 Garbage-First (G1) 垃圾回收器这样的实验性功能。

Java SE 10 (2018 年 3 月 20 日)

Java SE 10 的发布是为了移除基本数据类型并转向 64 位可寻址数组以支持大型数据集。它于 2018 年 3 月 20 日发布,并确认了十二项新功能。这些功能是

  • 局部变量类型推断
  • 实验性 Java JIT 编译器 这是 Graal 动态编译器在 Linux x64 平台上的集成
  • 应用程序类数据共享 这允许应用程序类放入共享归档中,以减少 Java 应用程序的启动和占用空间
  • 基于时间的版本号
  • G1 的并行 Full GC
  • 垃圾收集器接口
  • 其他 Unicode 语言标记扩展
  • 根证书
  • 线程本地握手
  • 在替代内存设备上分配堆
  • 移除原生头生成工具 - javah
  • 将 JDK 森林合并到一个存储库中

为了提高开发人员的生产力并简化现代 Java 应用程序的创建,Java SE 10 对库、API 和开发工具进行了改进。这些改进包括开发工具、IDE 集成和库的更新,以改善开发人员体验并加快开发过程。

Java SE 10 是一个值得注意的版本,它为 Java 平台带来了许多升级和新增功能,解决了现代软件开发中的重要需求和挑战。通过这些改进,Java 作为创建可靠且可伸缩应用程序的首选平台的地位进一步巩固。这些改进还旨在提高开发人员的效率、安全性、性能和平台兼容性。

Java SE 11 (2018 年 9 月 25 日)

Java SE 11 于 2018 年 9 月 25 日发布,标志着一个重要的里程碑,因为它是 Java 8 之后第一个长期支持 (LTS) 版本。LTS 版本将获得更长时间的支持和更新,使其适用于生产环境。Java 11 引入了多项功能和增强功能,包括:

  • Lambda 参数的局部变量语法:此功能允许对 lambda 参数使用 var 关键字,从而提高了 lambda 表达式的可读性和简洁性。
  • HTTP 客户端 (标准):Java 11 在 java.net.http 包中包含了一个新的、标准化的 HTTP 客户端 API,它提供了 HttpURLConnection 的现代替代品,支持 HTTP/2 和 WebSocket。
  • Flight Recorder:以前是商业功能,Flight Recorder 在 OpenJDK 11 中可用。
  • Epsilon Garbage Collector:Java 11 引入了一种新的实验性垃圾回收器 Epsilon,它专为不需要内存回收的用例而设计,例如性能测试或寿命极短的应用程序。
  • ZGC (实验性):ZGC(Z Garbage Collector)在 Java 11 中作为实验性功能引入,旨在为大型堆提供可伸缩、低延迟的垃圾回收,使其适用于需要非常大内存的应用程序。

Java SE 12 (2019 年 3 月 19 日)

  • Switch 表达式 (预览):增强了 switch 语句,允许它用作语句或表达式,从而可以编写更简洁的代码并减少重复。
  • JVM 常量 API (预览):引入了一个 API 来对关键类文件和运行时工件进行名义描述,提高了 JVM 的效率和安全性。

Java SE 13 (2019 年 9 月 17 日)

  • 文本块 (预览):提供了一种新的语言功能,可以更轻松地编写多行字符串字面量,从而提高了代码的可读性和可维护性。
  • Switch 表达式 (第二次预览):进一步增强了 switch 表达式,根据第一次预览的反馈,优化了语法并提高了可用性。

Java SE 14 (2020 年 3 月 17 日)

  • Records (预览):引入了一种新型类,称为 record,它是一种紧凑的声明类的方式,用于不可变数据的透明载体。
  • instanceof 的模式匹配 (预览):增强了 instanceof 运算符以允许模式匹配,从而在处理 instanceof 检查时可以编写更简洁、更具表现力的代码。

Java SE 15 (2020 年 9 月 15 日)

  • Sealed Classes (预览):引入了 sealed classes 和 interfaces,提供了一种限制哪些其他类或接口可以扩展或实现它们的方法,以提高可维护性和安全性。
  • 文本块 (第二次预览):文本块得到了进一步完善,提高了多行字符串字面量的可读性和易用性。

Java SE 16 (2021 年 3 月 16 日)

  • Records (第二次预览):对 Java SE 14 中引入的 records 功能进行了改进,提高了可用性并提供了更灵活的 record 类处理方式。
  • instanceof 的模式匹配 (第二次预览):增强了 instanceof 的模式匹配,实现了更高级的模式匹配功能,并提高了代码的表现力。

Java SE 17 (2021 年 9 月 17 日)

Java SE 17 是最新的重要版本之一,于 2021 年 9 月发布。它引入了多项旨在提高开发人员生产力、性能和安全性的功能和增强功能。Java SE 17 中的一些显著新增功能包括:

  • Sealed Classes:Sealed classes 和 interfaces 提供了一种限制哪些其他类或接口可以扩展或实现它们的方法。
  • switch 的模式匹配:switch 语句的模式匹配通过允许直接在 switch 表达式中进行模式匹配来简化代码。
  • Foreign Function and Memory API (Incubator):Foreign Function and Memory API 作为孵化器功能引入,使 Java 程序能够与 Java 运行时之外的代码和数据进行互操作。
  • Applet API 弃用:Java SE 17 中已弃用用于创建 Web applet 的 Applet API。
  • RMI Activation 弃用:RMI Activation 机制(促进 Java 远程方法调用 (RMI) 中远程对象的激活)已弃用。
  • JDK 内部的强封装:Java SE 17 继续了早期版本中开始的 JDK 内部强封装过程。
  • Sealed Classes:您可以限制哪些其他类或接口可以扩展或实现 sealed classes 和 interfaces。
  • Switch 的模式匹配:通过直接在 switch 表达式中启用模式匹配,switch 语句的模式匹配可以简化代码。
  • Foreign Function and Memory API (Incubator):此功能使 Java 程序能够与非 Java 运行时代码和数据进行通信。它最初是作为孵化器提出的。
  • Applet API 弃用:Java SE 17 弃用了用于创建在线 applet 的 Applet API。
  • RMI Activation 弃用:Java 远程方法调用 (RMI) 已弃用 RMI Activation 方法,该方法使激活远程对象更加容易。
  • 强大的 JDK 内部封装。

下一主题Java-timestamp