Java 编程语言最初由 Sun Microsystems 开发,由 James Gosling 发起,并于 1995 年作为 Sun Microsystems 的 Java 平台(Java 1.0 [J2SE])的核心组件发布。Java 命名的历史也非常有趣,它经历了多次命名。
Java 名称历史
GreenTalk
James Gosling 带领了一个名为“Green”的团队。这个团队的目标是创建一个新的项目。起初,C++ 是该项目的首选开发语言。James Gosling 希望通过改进 C++ 来实现目标,但由于高内存使用量,这个想法被拒绝了,于是团队开始使用一种新语言,最初命名为 GreenTalk。使用的文件扩展名为 .gt。后来这种语言被称作 Oak,最终定名为 Java。
Oak
James Gosling 将语言重命名为 Oak。因为在他的办公室前有一棵橡树。James Gosling 选择此名字是因为 Oak 代表坚固,而且橡树是美国、法国、罗马尼亚等国的国树。但是由于 Oak Technologies 已经注册了 Oak 作为商标,James 的团队不得不另寻他名。
最终定名 Java
团队提出了多个名字如 DNA、Silk、Ruby 和 Java。最终选定 Java。James Gosling 根据一种浓缩咖啡豆的名字提出了 Java 这个名称。Java 是印度尼西亚的一个岛,在那里发现了一种新咖啡,称为 Java 咖啡。据 James Gosling 所说,Java 是与 Silk 一起的首选名称之一。最终选择了 Java,因为它非常独特,并且表达了动态、革命性的感觉,说出来也很有趣。
Sun 于 1995 年发布了第一个公共实现 Java 1.0。它承诺“一次编写,到处运行”,在流行的平台上提供免费的运行时。
2006 年 11 月 13 日,Sun 根据 GNU 通用公共许可证(GPL)发布了大部分 Java 作为自由和开源软件。
2007 年 5 月 8 日,Sun 完成了这一过程,使 Java 的所有核心代码都成为自由和开放源码,除了 Sun 没有版权的一小部分代码之外。
Java Standard Edition 的最新版本是 Java SE 21。随着 Java 的发展和广泛普及,构建了多种配置以适应各种类型的平台。例如:J2EE 用于企业应用,J2ME 用于移动应用。
Java 版本历史
在将近 30 年的时间里,Java 经历了许多次要和主要版本。以下是对到目前为止 Java 版本的一个简短说明。
序号 |
版本 |
日期 |
描述 |
1 |
JDK Beta |
1995 |
初始草案版 |
2 |
JDK 1.0 |
23 Jan 1996 |
一个稳定的变体 JDK 1.0.2 被称为 JDK 1 |
3 |
JDK 1.1 |
19 Feb 1997 |
重大功能如 JavaBeans、RMI、JDBC、内部类在此版本中增加 |
4 |
JDK 1.2 |
8 Dec 1998 |
Swing、JIT 编译器、Java 模块、集合在此引入,该版本取得了巨大成功 |
5 |
JDK 1.3 |
8 May 2000 |
HotSpot JVM、JNDI、JPDA、JavaSound 和对合成代理类的支持被加入 |
6 |
JDK 1.4 |
6 Feb 2002 |
添加了 Image I/O API 来创建/读取 JPEG/PNG 图像。集成 XML 解析器和 XSLT 处理器(JAXP)和其他重要更新 |
7 |
JDK 1.5 或 J2SE 5 |
30 Sep 2004 |
添加了多种新特性至语言如 foreach、var-args、泛型等 |
8 |
JAVA SE 6 |
11 Dec 2006 |
去掉了 1. 标记并升级到 JAXB 2.0,支持 JSR 269 和 JDBC 4.0 |
9 |
JAVA SE 7 |
7 Jul 2011 |
增加了对动态语言的支持到 JVM。另一些增强包括字符串在 switch 语句中的使用,压缩 64 位指针等 |
10 |
JAVA SE 8 |
18 Mar 2014 |
增加了函数式编程支持。Lambda 表达式、流、默认方法、新的日期时间 API 引入 |
11 |
JAVA SE 9 |
21 Sep 2017 |
引入模块系统,可以应用于 JVM 平台 |
12 |
JAVA SE 10 |
20 Mar 2018 |
添加了 Unicode 语言标签扩展。根证书、线程本地握手、支持堆分配到备用内存设备等 |
13 |
JAVA SE 11 |
5 Sep 2018 |
添加了动态类文件常量,Epsilon 无操作垃圾收集器,lambda 参数中的局部变量支持,低开销堆内存分析支持 |
14 |
JAVA SE 12 |
19 Mar 2019 |
添加了实验性垃圾收集器 Shenandoah:低暂停时间垃圾收集器,微基准测试套件,JVM 常量 API |
15 |
JAVA SE 13 |
17 Sep 2019 |
新增功能 - 文本块(多行字符串),增强的线程本地握手 |
16 |
JAVA SE 14 |
17 Mar 2020 |
新增功能 - 记录,一种用于建模的新类类型,instanceof 的模式匹配,直观的 NullPointerException 处理 |
17 |
JAVA SE 15 |
15 Sep 2020 |
新增功能 - 密封类,隐藏类,外国函数和内存 API(孵化阶段) |
18 |
JAVA SE 16 |
16 Mar 2021 |
预览功能 - 记录,switch 的模式匹配,Unix 域套接字通道(孵化阶段)等 |
19 |
JAVA SE 17 |
14 Sep 2021 |
最终化功能 - 密封类,instanceof 的模式匹配,默认情况下对 JDK 内部的强封装。新的 macOS 渲染管道等 |
20 |
JAVA SE 18 |
22 Mar 2022 |
新增功能 - 默认 UTF-8,Java API 文档中的代码片段,向量 API(第三次孵化),外国函数,内存 API(第二次孵化)等 |
21 |
JAVA SE 19 |
20 Sep 2022 |
新增功能 - 记录模式,向量 API(第四次孵化),结构化并发(孵化阶段)等 |
22 |
JAVA SE 20 |
21 Mar 2023 |
新增功能 - 范围值(孵化阶段),记录模式(第二次预览),switch 的模式匹配(第四次预览),外国函数与内存 API(第二次预览)等 |
23 |
JAVA SE 21 |
19 Sep 2023 |
新增功能 - 字符串模板(预览),序列集合,代际 ZGC,记录模式,switch 的模式匹配等 |