附录B Java简史

相信本书的读者对于Java语言肯定都有一定的了解。从1995年至今,Java语言经过了16年的发展和完善,目前已经成为软件开发中的主流编程语言。数以千万计的开发人员使用Java语言在不同平台上开发出各种不同的应用,包括Web应用、桌面应用和移动设备上的应用等。在TIOBE给出的编程语言流行程度统计排名中,Java语言常年占据首位。这个排名直观地反映了Java语言在开发者社区中的强大影响力。

对于一种有着悠久历史的编程语言来说,其历史本身既是一种财富,也是一种负担。庞大的开发者社区为这门语言的演化提供了坚实的用户基础,也为这门语言贡献了非常多的可复用的资产。从另外一方面来说,必须保持的后向兼容性也使得Java语言在应对变化时显得力不从心。当Ruby程序员可以把基本类型,如整数和浮点数,当做功能完备的对象来使用时,在Java世界中,基本类型和对象还是分开的。Java程序员享受不到Ruby中3.next和5.times那样简洁易用的语法。虽然Java SE 5.0引入了基本类型的自动装箱和拆箱机制,缓解了这个问题,但是依然无法实现Ruby那样的灵活性。当然,Java语言在最初设计的时候,肯定权衡了各种选择的优缺点,做出了当时最合理的设计选择。通过了解一门编程语言的历史,可以深刻理解其发展过程中各种变化背后的动机。下面简要地介绍一下Java语言的发展历史。

1991年,James Gosling、Mike Sheridan和Patrick Naughton在Sun公司开始了一种新的编程语言的设计和开发工作。这种新的语言换过好几个名字,从最初的Oak到后来的Green,直到最后被定名为Java。提到Java,就会想到印度尼西亚群岛中盛产咖啡的爪哇(Jawa)岛。正因如此,Java语言的标志是一杯咖啡的形状。在最初的时候,这门语言是以与计算机相连接的智能消费电子产品作为目标平台而设计的。Java语言最早运行在数字有线电视的控制器上。不过,这项技术对当时的产业来说,过于超前了。幸运的是,Java赶上了从1995年开始的互联网发展的上升期。Java语言乘着互联网的东风,以极快的速度发展起来。

1995年底,Sun公司正式发布Java语言。在随后不久的1996年初,JDK 1.0发布。当时Java语言的杀手级应用(killer app)就是Java applet。当时主流的浏览器都支持Java applet。在当时,HTML语言所能提供的交互性能力还比较弱,而用户对于互联网应用的热情却非常高涨。这就在Web应用的交互能力和用户的需求之间产生了一个缺口。Java applet的出现正好填补了这个空白。Java applet提供了丰富的用户界面组件,以及2D图形绘制能力,其所提供的交互性体验远优于当时的HTML,因此Java applet得到了广泛流行。Java applet的代码是从远程服务器上下载到用户的本地浏览器中来运行的。这种需求催生了Java语言的一个重要特性,那就是类加载器。动态类加载的概念被认为是Java语言唯一的重要创新。本书的第9章专门对类加载器进行介绍。

在JDK 1.0之后,JDK 1.1于1997年发布。在这个版本中,一些新特性被加入进来,包括内部类、JavaBeans、JDBC、RMI和反射等。JDK 1.1发布三个星期之后,就达到了22万的下载量,其关注程度可见一斑。

从JDK 1.1之后的版本开始,Java为不同的目标平台提供了不同的配置,这就是现在为开发人员所熟知的标准版、企业版和移动版。Sun公司也启用了Java 2这样一个新名称。这些不同的配置也被对应地称为Java 2标准版(J2SE)、Java 2企业版(J2EE)和Java 2移动版(J2ME)。J2SE 1.2于1998年发布,其中最重要的更新是添加了Swing用户界面库和集合类框架。Swing用户界面的引入,使Java在桌面应用开发中占据了一席之地。而Java的集合类框架则一直被认为是架构和API设计的良好典范,其主要设计和开发者是大名鼎鼎的《Effective Java》的作者Joshua Bloch。

Java 2的版本更新以较快的速度进行。2000年发布的J2SE 1.3中最重要的改进是使用HotSpot作为默认的Java虚拟机,极大地提升了Java程序的运行性能,在一定程度上缓解了一直以来为开发者所诟病的性能问题。动态代理机制也在这个版本中被加入,允许以简单的方式来实现面向方面编程(AOP)。

随着Java语言的不断流行,对Java平台的需求也日益增多。如何让Java语言健康有序地发展,成为Sun公司亟待解决的一个问题。Sun公司尝试向国际标准化组织靠拢,以寻求Java语言的标准化。后来Sun公司放弃了这种努力,转而拥抱广大的开发者社区,采用社区驱动的方式来促进Java语言的发展。1998年,Java程序社区(Java Community Process, JCP)成立,其中包含了对Java感兴趣的公司、研究机构和个人。对Java平台的改进都通过JCP来运作。对Java平台所做的每一个修改都以Java规范请求(Java Specification Request, JSR)的形式来提交给JCP进行审阅和批准,最终成为Java平台的一部分。

2002年,首个采用JCP方式开发的Java平台J2SE 1.4发布。在这个版本中,更多的类库被加入进来,包括正则表达式、非阻塞IO(NIO)、日志记录API、XML和XSLT支持以及安全和加密功能等。

2004年发布的J2SE 5.0是Java语言发展历史上的一个重要的版本。在这个版本中,Java增加了很多语法上的新特性,包括泛型支持、注解、基本类型的自动装箱和拆箱、枚举类型、参数长度可变的方法、增强的for循环和静态引入等。而在类库方面,并发实用类库java.util.concurrent的引入,极大地降低了并发应用开发的复杂度。

从J2SE 5.0的下一个版本开始,Sun又对不同目标平台的版本改换了新的名称,分别是Java SE、Java EE和Java ME。Java SE 6于2006年发布。这个版本的新特性主要体现在对脚本语言的支持、Java编译器API和可插拔式注解等方面。Java SE 6另一个重要提升是在性能方面,包括核心平台和Swing用户界面库的性能都有了很大的提升。在正式版本发布之后,每隔一段时间就会有小的更新修订版本发布。

Java SE 6正式发布之后相当长的一段时间内,Java平台都没有大版本的更新。而Java 7的发布时间是在2011年的7月底。从Java 6到Java 7的时间跨度来说,开发者社区已经对Java平台的这个新版本期待了很长的时间。Java 7及其后续的版本所包含的改动,会对Java语言本身产生深远而重大的影响。Java 7中所包含的新特性和变化正是本书的重要组成部分。