任何一门语言的诞生都有其诞生的意义。 Java 也不例外。
任何一个语言在一开始的时候都是不完美的, 并且相对来说功能和开发语言的需求就简单很多,也就是功能相对单一,都是在一点一点完善发展起来的, 跟上时代了就继续盛行, 哪些迭代没有跟上的就也被淘汰了。
Java 的历史要追溯到 1991 年, 由 Sun 公司带领的开发小组, 想设计一种小型的计算机语言,主要用于有线电视转换盒这类的消费设备。 由于这类设备的处理能力和内存都非常有限,所以语言就必须设计的非常小且能够生成紧凑的代码。 另外,由于不同的厂商会选择不同的 CPU, 因此很重要的一点就是这种语言不应该与任何特定的体系结构绑定。这个项目被命名为 “Green”。
Sun 公司的人都有 Unix 的应用背景, 所以开发的语言用了 C++ 为基础。并把这种语言称为 “Oak”, 后来, Sun 公司的人后来发现, Oak 是一种已经有的计算机语言的名字, 于是, 将其改名为 “Java”。
1992 年, Green 项目发了第一个产品,这个产品可以提供非常智能的远程控制,遗憾的是, Sun 公司对这个产品并不感兴趣。
1993 年,Green 项目(新名字 “First Person 公司”)在一这一整年以及 1994 年上半年, 一直苦苦寻求买家购买他们的技术。 然后一个也没有找到, 然后在 1994 年,Frist Person 公司解散了。
而且在这一年,1994年4月20日,一条64K的国际专线从中科院计算机网络中心(NCFC工程)通过美国Sprint公司连入Internet,实现了中国与Internet的全功能连接。从此中国被国际上正式承认为第77个真正拥有全功能Internet的国家。
当这些在 Sun 公司发生的时候, Internet 的万维网也在日渐发展壮大, 当时的万维网关键是把浏览器超文本页面转换到屏幕上。 在 1994 年大多数都在使用 Mosaic, 这是 1993 年出自伊利诺伊大学超级计算中心的一个非商业化的 Web 浏览器。 在1994 年中期,Java 语言的开发者意识到, 要是能够建立一个相当酷的浏览器, 在客户/服务器主流框架中, 浏览器恰好需要我们完成一些工作: 体系结构中立、实时、可靠、安全。这些问题在工作站环境中并不太重要。 所以决定开发浏览器。
实际的浏览器是由 Patrick Naughton 和 Jonathan Payne 开发的,并演变为 HotJava 浏路器. HotJava 浏览器采用Java 编写,为了炫耀 Java 语言的超强能力。这个浏览器可以在网页中执行内嵌的 Java 代码。 也就是 Java Applet。这一 “技术证明” 在 1995 年 5 月 23 日的 SunWorld'95 大会上展示,同时引发了人们对他的追逐, 一直延续延续到现在。诞生几个月后, 就超过了 10 万人下载 Java 语言。
1996 年初, Sun 发布了第一个 Java 1.0 版本。 但是这个版本 Java 1.0 并不能用来进行真正的应用开发。虽然后来 Java 1.1 弥补了其中很多的不足和明显的缺陷。大大改进了反射能力, 并未 GUI 编程增加了新的事件处理模型,单是它仍然有很大的局限性, 并没有为 Java 的黄金时期到来做好准备。
JDK 1.0 开发代号为 Oak ( 橡树 )。
1997 年 2 月, 发布了 Java 1.1。 JavaOne 会议召开, 参与者逾一万人, 创下了当时全球同类会员规模记录。
JDK 1.1 引入的新特性包括:
引入JDBC(Java Database Connectivity);
支持内部类;
引入Java Bean;
引入RMI(Remote Method Invocation);
引入反射(仅用于内省)。
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 年 4 月 27 日, HotSpot 虚拟机发布。
2000 年 5 月 8 日, J2SE 1.3 发布。
JDK 1.3 开发代号为Kestrel(红隼)
引入的新特性包括:
引入Java Sound API;
jar文件索引;
对Java的各个方面都做了大量优化和增强。
2001 年 9 月 24 日, J2EE 1.3 发布。
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 年 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 年 6 月,JavaOne 大会召开,Sun 公司公开 Java SE 6。并且,对 Java 的各种版本进行更名,取消其中的数字“2”:J2EE 改名为 Java EE,J2SE 改名为 Java SE,J2ME 改名为Java ME。单内部版本不变化还沿用之前的写法。一直延续至今。 这个版本没有对语言方面进行修改, 而是做了其他性能改进, 并增强了类库。
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;
做了很多优化。
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 年 7 月,JavaSE 7 发布。但是很多规划在这个版本的特性,其中 Lambda 项目 ( Lambda 表达式、函数式编程)、Jigsaw 项目(虚拟机模块化支持)、动态语言支持、GarbageFirst 收集器和 Coin 项目(语言细节进化)等子项目都没有实现在这个版本中, 而是用了 Oracle 公司实行的 “B计划”。
2014 年 3 月,JavaSE 8 发布。 这个版本, 在近 20 年中这个版本变更最大, Java SE 8 包含了 “函数式” 编程方式,可以很容易的表述并发执行的计算。 这个版本也是现在企业中使用范围最广的一个版本。 就想一开始说的那样, 能跟上时代的进步, 就不会被淘汰。
JDK 1.8 开发代号是Spider(蜘蛛)
支持 lambda支持;
增强日期与时间API的功能;
对垃圾回收的性能也进行了改进;
并且移除了permgen区。
Lambdas表达式与Functional接口
接口的默认与静态方法
方法引用
重复注解
更好的类型推测机制
扩展注解的支持
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 年开始, 每6个月就会发布一个 Java 版本, 以更快地引入新特性。这里又分为 LTS 版和最新版。 生产环境中最好只使用 LTS 版本, 因为这个版本更加稳定, 维护周期更长。
2018 年 3 月 21 日, Java 10 发布。
2018 年 9 月 25 日, Java 11 LTS 发布。
2019 年 2 月 Java 12 发布
2019 年 9 月 Java 13 发布
2020 年 3 月 17 日,Java 14 发布。
2020 年 9 月 15 日,Java 15 发布。
2021 年 3 月 16 日,Java SE 16 发布。
2021 年 9 月 14 日,Java SE 17 LTS 发布。
这个是继 Java 11 之后的有一个长期支持版本, 并且直接支持到了 2029 年 9 月。这可能是下一个 Java 8。所以学习的话, 可以直接学习这个版本。当然也可以直接学习 Java 17 这样的话, 对于工作来说 3 年之内不会有大的变化。