总览
1991 年
Java 的历史要追溯到 1991 年, 由 Sun 公司带领的开发小组, 想设计一种小型的计算机语言,主要用于有线电视转换盒这类的消费设备。
由于这类设备的处理能力和内存都非常有限,所以语言就必须设计的非常小且能够生成紧凑的代码。 另外,由于不同的厂商会选择不同的 CPU,
因此很重要的一点就是这种语言不应该与任何特定的体系结构绑定。这个项目被命名为 “Green”。
Sun 公司的人都有 Unix 的应用背景, 所以开发的语言用了 C++ 为基础。并把这种语言称为 “Oak”, 后来, Sun 公司的人后来发现, Oak
是一种已经有的计算机语言的名字, 于是, 将其改名为 “Java”。
1992 年
1992 年, Green 项目发了第一个产品,这个产品可以提供非常智能的远程控制,遗憾的是, Sun 公司对这个产品并不感兴趣。
1993 年
1993 年,Green 项目(新名字 “First Person 公司”)在一这一整年以及 1994 年上半年, 一直苦苦寻求买家购买他们的技术。
然后一个也没有找到, 然后在 1994 年,First Person 公司解散了。
而且在这一年,1994年4月20日,一条64K的国际专线从中科院计算机网络中心(NCFC工程)通过美国Sprint公司连入Internet,实现了中国与Internet的全功能连接。从此中国被国际上正式承认为第77个真正拥有全功能Internet的国家。
当这些在 Sun 公司发生的时候, Internet 的万维网也在日渐发展壮大, 当时的万维网关键是把浏览器超文本页面转换到屏幕上。 在 1994
年大多数都在使用 Mosaic, 这是 1993 年出自伊利诺伊大学超级计算中心的一个非商业化的 Web 浏览器。 在1994 年中期,Java
语言的开发者意识到, 要是能够建立一个相当酷的浏览器, 在客户/服务器主流框架中, 浏览器恰好需要我们完成一些工作:
体系结构中立、实时、可靠、安全。这些问题在工作站环境中并不太重要。 所以决定开发浏览器。
1995 年
实际的浏览器是由 Patrick Naughton 和 Jonathan Payne 开发的,并演变为 HotJava 浏览器. HotJava
浏览器采用Java 编写,为了炫耀 Java 语言的超强能力。这个浏览器可以在网页中执行内嵌的 Java 代码。 也就是 Java Applet。这一
“技术证明” 在 1995 年 5 月 23 日的 SunWorld'95 大会上展示,同时引发了人们对他的追逐, 一直延续延续到现在。诞生几个月后,
就超过了 10 万人下载 Java 语言。
1996 年
1996 年初, Sun 发布了第一个 Java 1.0 版本。 但是这个版本 Java 1.0 并不能用来进行真正的应用开发。虽然后来 Java 1.1
弥补了其中很多的不足和明显的缺陷。大大改进了反射能力, 并未 GUI 编程增加了新的事件处理模型,单是它仍然有很大的局限性, 并没有为 Java
的黄金时期到来做好准备。
JDK 1.0 开发代号为 Oak ( 橡树 )。
1997 年
1997 年 2 月, 发布了 Java 1.1。 JavaOne 会议召开, 参与者逾一万人, 创下了当时全球同类会员规模记录。
JDK 1.1 引入的新特性包括:
*
引入JDBC(Java Database Connectivity);
*
支持内部类;
*
引入Java Bean;
*
引入RMI(Remote Method Invocation);
*
引入反射(仅用于内省)。
1998 年
1998 年 JavaOne 会议的头号新闻就是发布 Java 1.2 版本, 将这个早期玩具式的 GUI 和图形工具包括一些工具包。 在这个版本发布的 3
天后, Sun 公司的市场部将它改名为更加吸引人的 “Java 2 标准版软件开发 1.2 版”。
也就在这个时候, 除了标准版(Standard Edition)J2SE 之外, Sun 公司还推出了另外两个版本: 一是,
手机嵌入式设备“微型版”(Micro Edition)J2ME。另一个是用于服务器端的处理“企业版”(Enterprise Edition)J2EE。
JDK 1.2 开发代号为Playground(操场)
*
引入的新特性包括:
*
引入集合(Collection)框架;
*
对字符串常量做内存映射;
*
引入JIT(Just In Time)编译器;
*
引入对打包的Java文件进行数字签名;
*
引入控制授权访问系统资源的策略工具;
*
引入JFC(Java Foundation Classes),包括Swing 1.0、拖放和Java 2D类库;
*
引入Java 插件;
*
在JDBC中引入可滚动结果集、BLOB、CLOB、批量更新和用户自定义类型;
*
在Applet中添加声音支持。
1999 年
1999 年 4 月 27 日, HotSpot 虚拟机发布。
2000 年
2000 年 5 月 8 日, J2SE 1.3 发布。
JDK 1.3 开发代号为Kestrel(红隼)
*
引入的新特性包括:
*
引入Java Sound API;
*
jar文件索引;
*
对Java的各个方面都做了大量优化和增强。
2001 年
2001 年 9 月 24 日, J2EE 1.3 发布。
2002 年
2002 年 2 月 26 日, J2SE 1.4 发布, 标准版 1.3 和 1.4 版本对最初的 Java 2
版本做出了增量式的改进,提供了不断扩展的标准类库。 提高了性能, 并且还修复一些 bug。在这个期间, 原先对 Java Applet
和客户端应用的炒作逐渐消退, 但是 Java 则成为服务器应用端的首选平台。
并且在这个版本上出现了大量的开源框架。
JDK 1.4 开发代号为Merlin(隼)
*
引入的新特性包括:
*
XML处理;
*
Java打印服务;
*
引入Logging API;
*
引入Java Web Start;
*
引入JDBC 3.0 API;
*
引入断言;
*
引入Preferences API;
*
引入链式异常处理;
*
支持IPv6;
*
支持正则表达式;
*
引入Image I/O slot machine API。
2004 年
2004 年 9 月 30 日, 下午 18:00, J2SE 1.5 发布。 这成为了 Java 语言的里程碑,这个版本对 Java
语言做出了重大的改进,为了表示该版本的重要性, 这个版本原来定位 1.5 版, 在 2004 年的 JavaOne 大会之后, 版本直接升为 5.0,对外宣布
Java SE 5.0。内部还是使用 Java 1.5。 这个版本加入了泛型的支持,另外受到了 C# 的启发, 还增加了几个很有用的语言特性: for
each 循环、自动装箱、注解、枚举、可变长参数等。
JDK 1.5 开发代号为Tiger(老虎)
*
引入的新特性包括:
*
引入泛型;
*
增强循环,可以使用迭代方式;
*
自动装箱与自动拆箱;
*
类型安全的枚举;
*
可变参数;
*
静态引入;
*
元数据(注解);
*
引入Instrumentation。
2005 年
2005 年 6 月,JavaOne 大会召开,Sun 公司公开 Java SE 6。并且,对 Java 的各种版本进行更名,取消其中的数字“2”:J2EE
改名为 Java EE,J2SE 改名为 Java SE,J2ME 改名为Java ME。单内部版本不变化还沿用之前的写法。一直延续至今。
这个版本没有对语言方面进行修改, 而是做了其他性能改进, 并增强了类库。
2006 年
2006 年 12 月, Sun 公司发布了 Java EE 6, 并且宣布, 将 Java 语言作为免费软件对外发布。使用 GPL v2 (GNU
General Public License v2) 协议下公开了源码。并且建立了 OpenJDK
组织对这些源码进行独立管理。除了极少量的产权代码外(Encumbered Code,这部分代码大多是 Sun 公司本身也无权限进行开源处理的),OpenJDK
几乎包括了 Sun JDK 的全部代码外,OpenJDK 的质量主管曾经表示,在 JDK 1.7 中,Sun JDK 和 OpenJDK
除了代码文件头的版权注释之外,代码基本上完全一样,所以 OpenJDK7 与 Sun JDK 1.7 本质上就是同套代码库开发的产品。
JDK 1.6 开发代号为Mustang(野马)
*
引入的新特性包括:
*
支持脚本语言;
*
引入JDBC 4.0 API;
*
引入Java Compiler API;
*
可插拔注解;
*
增加对Native PKI(Public Key Infrastructure)、Java GSS(Generic Security
Service)、Kerberos和LDAP(Lightweight Directory Access Protocol)的支持;
*
继承Web Services;
*
做了很多优化。
2009 年
JDK 1.6发布以后,由于代码复杂性的增加、JDK开源、开发 JavaFX、经济危机及Sun
公司收购案等原因,SUN公司在JDK发展以外的事情上耗费了很多资源,JDK的更新没有再维持两年发布一个主版本的发展速度。并且在 2009 年 4 月 20
日,被 Oracle 以 74 亿美元收购 Sun 公司,取得了 Java
的商标版权(Java语言本身并不属于哪个公司所有,它由JCP组织进行管理,尽管JCP主要是由Sun 公司或者说 Oracle 公司所领导的)。也就在这两年
Java 的开发停滞了一段时间。一直到了 2011 年。
JDK 1.7 开发代号是Dolphin(海豚)
*
引入的新特性包括:
*
switch语句块中允许以字符串作为分支条件;
*
在创建泛型对象时应用类型推断;
*
在一个语句块中捕获多种异常;
*
支持动态语言;
*
支持try-with-resources;
*
引入Java NIO.2开发包;
*
数值类型可以用2进制字符串表示,并且可以在字符串表示中添加下划线;
*
钻石型语法;
*
null值的自动处理。
2011 年
2011 年 7 月,JavaSE 7 发布。但是很多规划在这个版本的特性,其中 Lambda 项目 ( Lambda 表达式、函数式编程)、Jigsaw
项目(虚拟机模块化支持)、动态语言支持、GarbageFirst 收集器和 Coin 项目(语言细节进化)等子项目都没有实现在这个版本中, 而是用了
Oracle 公司实行的 “B计划”。
2014 年
2014 年 3 月,JavaSE 8 发布。 这个版本, 在近 20 年中这个版本变更最大, Java SE 8 包含了 “函数式”
编程方式,可以很容易的表述并发执行的计算。 这个版本也是现在企业中使用范围最广的一个版本。 就想一开始说的那样, 能跟上时代的进步, 就不会被淘汰。
JDK 1.8 开发代号是Spider(蜘蛛)
*
支持 lambda支持;
*
增强日期与时间API的功能;
*
对垃圾回收的性能也进行了改进;
*
并且移除了permgen区。
*
Lambdas表达式与Functional接口
*
接口的默认与静态方法
*
方法引用
*
重复注解
*
更好的类型推测机制
*
扩展注解的支持
2017 年
2017 年 7 月,Oracle 公司将发布 JDK 9。这个版本算是比较大的调整,加入了很早之前就规划的模块化功能。并且对整个 JDK
基于模块进行了重新编写。Java 9 提供了轻量级 JSON API; 使用 G1 作为默认的垃圾收集器,替代了之前默认使用的 Paralel GC; 引入了
jShell 这个交互性工具。并且全面支持 HTTP 2.0。
也就是在这一年,2017 年 8 月,Oracle 决定将 Java EE 移交给开源组织,最后 Eclipse 基金会接手。
由于甲骨文不允许开源组织用 Java 的名号,于是 Eclipse 选出了 "Jakarta EE" 和 "Enterprise Profile"
两个后续名字,最终前者以 64.4% 的票数获胜。
也就是说,Java EE 已经正式更名为 Jakarta EE(雅加达)。
2018 年
从 2018 年开始, 每6个月就会发布一个 Java 版本, 以更快地引入新特性。这里又分为 LTS 版和最新版。 生产环境中最好只使用 LTS 版本,
因为这个版本更加稳定, 维护周期更长。
2018 年 3 月 21 日, Java 10 发布。
2018 年 9 月 25 日, Java 11 LTS 发布。
2019 年
2019 年 2 月 Java 12 发布
2019 年 9 月 Java 13 发布
2020 年
2020 年 3 月 17 日,Java 14 发布。
2020 年 9 月 15 日,Java 15 发布。
2021 年
2021 年 3 月 16 日,Java SE 16 发布。
2021 年 9 月 14 日,Java SE 17 LTS 发布。
这个是继 Java 11 之后的有一个长期支持版本, 并且直接支持到了 2029 年 9 月。这可能是下一个 Java 8。所以学习的话,
可以直接学习这个版本。当然也可以直接学习 Java 17 这样的话, 对于工作来说 3 年之内不会有大的变化。