只有少数几种编程语言对程序设计带来过根本性的影响。其中,Java的影响由于迅速和广泛而格外突出。可以毫不夸张的说,1995年Sun公司发布的Java1.0给计算机程序设计领域带来了一场变革。这场变革迅速地把Web转变了一个高度交互的环境,也给计算机语言的设计设置了一个新标准。

多年以来,Java不断地发展、演化和修订。和其他语言加入新功能的动作迟缓不同,Java一直站在计算机程序设计语言的前沿,部分原因是变革的文化,部分原因是它所面对的变化。Java已经做过或大或小的多次升级。

第一次主要的升级是1.1版,这次升级比较大,加入了很多新的库元素,修订了处理事件的方式,重新配置了1.0版本的库中的许多功能。

第二个主要的版本是Java2,它代表Java的第二代,标志着Java的“现代化”的到来。Java2第一个发布的版本号是1.2。Java2在第一次发布时使用1.2版本号看上去有些奇怪,原因在于该版本号最初是指Java库的内部版本号,后来就泛指整个版本号了。Java2被Sun公司重新包装为J2SE(Java 2 Platform Standard Edition,请大家读作J-two-SE,而不是J-2-SE),并且开始把版本号应用于该产品。

在J2SE后的下一个版本是J2SE 1.3,它是Java 2版本首次较大的升级。它增强了一些已有的功能。

之后的J2SE 1.4版本进一步增强了Java。该版本包括一些重要的新功能,如链式异常、基于通道的I/O(NIO)以及assert关键字。

在J2SE 1.4版本之后的下一个版本是J2SE 5,他是Java的第二次变革。以前的几次Java升级提供的改进虽然重要,但是是增量式的,而J2SE 5却从该语言的作用域、功能和范围等方面提供了根本性的改进。为了帮助理解J2SE 5的修改程度,下面列出了J2SE 5中的一些主要的新增功能:

●  泛型

●  自动装箱/自动拆箱

●  枚举

●  增强型for-each形式的for循环

●  可变长度实参(varargs)

●  静态导入

●  注解(annotation)

这些条目都是重要的升级,每一条都代表了Java语言的一处重要改进。其中,泛型、增强型for循环和可变长度实参引入了新的语法元素;自动装箱和自动拆箱修改了语法规则;注解增加了一种全新的编程注解方法。

这些新功能的重要性反应在使用的版本号“5”上,从版本号的变化方式看,这一版本的Java应该是1.5。由于新功能和变革如此之多,常规的版本号升级(从1.4到1.5)已经无法标识实际的变化,因此Sun决定使用版本号5,以强调发生了重要改进。因此,当前的版本叫做J2SE 5,开发工具包叫做JDK 5。但是,为了保持和以前的一致性,Sun决定使用1.5作为内部版本号,也叫做开发版本号。J2SE 5中的“5”叫做产品版本号。

J2SE 5之后发布的升级版本是Java SE 6,Sun再次决定修改Java平台的名称,把“2”从版本号中删除了。因此,Java平台现在的名称是Java SE,官方产品名称是Java Platform Standard Edition 6,对应的Java开发工具包叫做JDK 6。和J2SE 5一样,Java SE 6中的“6”是指产品的版本号,内部的开发版本号是1.6。

Java SE 6建立在J2SE 5的基础之上,做了进一步的增强和改进。Java SE 6并没有对Java语言本身添加较大的功能,而是增强了API库,添加了多个新包,改进了运行时环境。它在漫长的生命周期内经历了一些更新,添加了一些升级功能。总之,Java SE 6进一步巩固了J2SE 5建立的领先地位。在国内,J2SE 5以及Java SE 6是使用最多的版本。

Java SE 6之后发布的升级版本是Java SE 7,对应的Java开发工具包叫做JDK 7,内部版本号是1.7。Java SE 7是Oracle收购(2009年4月20日仅仅以74亿美元收购,在Sun被收购后仅仅一年James Gosling便从Oracle离职了)Sun Microsystems之后发布的第一个主版本。Java SE 7包含许多新功能,对语言和API库做了许多增强。Java SE 7添加的最重要的功能是在Project Coin中开发的那些功能。Project Coin的目的是确保把对Java语言所做的很多小改动包含到JDK 7中,其中包括:

●  使用String控制switch语句。

●  二进制整形字面值。

●  在数值字面值中使用下划线。

●  新增一种叫做try-with-resources的try语句,支持自动资源管理。

●  构造泛型实例时,通过菱形运算符使用类型推断。

●  增强了异常处理,可以使用单个catch捕获两个或更多个异常(多重捕获),并且对重新抛出的异常可以进行更好的类型检查。

可以看到,虽然Project Coin中的功能被视为小改动,但是“小”这个词实在不能体现它们所带来的好处。特别是,try-with-resources语句对大量代码的编写方式会产生深远的影响。

之后Oracle推出了Java SE 8,这也是目前国内使用的最新的版本(仅仅是少数公司,大部分公司还在使用Java SE 8之前的版本),Java SE 8对应的开发工具包是JDK 8,内部的开发版本号是1.8。JDK 8表示这是对Java语言的一次重大升级(其实这些升级应该在Java SE 7时便完成的,但是当时Sun公司被Oracle收购,延误了开发,所以在Java SE 7中没有包含这些升级),因为本次升级包含了一种意义深远的新语言功能:lambda表达式。lambda表达式的影响深远:不但改变了概念化的编程方式,而且改变了Java代码的编写方式。使用lambda表达式,可以简化并减少创建某个结构所需的源代码量。lambda表达式有助于确保Java成为用户所期望的充满活力且敏捷的语言。从JDK 8开始,通过接口还可以为指定的方法定义默认实现。总之,Java SE 8这一主要版本扩展了Java语言的功能,并且改变了Java代码的编写方式,带来的影响足够深远,在未来几年后将体现出来(注意,是未来几年后,而不是当前)。

在Java SE 8之后,Oracle公司又相继推出了Java SE 9以及Java SE 10版本,预计2018年9月份推出Java SE 11。但是Java SE 8作为一个LTS版本(长期支持版,将有三年的维护期,直到下一个LTS版本发布,按照Oracle目前的计划,下一个LTS版本是Java SE 11)依然是目前最好的选择,而Java SE 9、Java SE 10将作为功能性更新版本,维护周期只有6个月的时间。所以不建议大家使用。而且在Java SE 9中增加的新特性可能因为一些原因在Java SE 10或Java SE 11中就被移除了,所以也不建议大家学习最新版本的新特性,还是以学习稳定版本为主要目标。

05-11 22:12