1.J2SE
:怀胎 Java的历史可以追溯到1991年4月,Sun公司的James Gosling领导的绿色计划(Green Project)开始着力发展一种分布式系统结构,使其能够在各种消费性电子产品上运行,他们使用了C/C++/Oak语言。由于电子产品种类繁多,运行环境各不相同,使得用这些语言进行开发的软件必须为不同的电子产品而专门设计,所以项目组疲于奔命,消费性电子产品软件环境的发展无法达到预期的目标,绿色计划也陷于停滞状态。在Java1.0或者1.1中,称API库为JDK,但为了方便市场推广,Sun公司在Java1.2版以后将JDK1.2改名为J2SDK,将Java改名为Java 2。在99年Sun公司还将Java2平台分为三大块:J2SE,J2EE,J2ME。这次市场推广革命顺应了网络急速发展的潮流,对Java2平台的发展起到了很好的催化剂的作用。 * API供应标准革命
而随着供应商的不同,Java的API分为三大类:
如果你有需求不能通过遵循标准的API来实现,可以向 www.jcp.org 提出制定新的API的请求,经过审核,你的请求可能被通过或者驳回;如果是被通过,则开始进入制定该API的程序。 J2SE1.2时代进行的这些革命形成的制度一直沿用到现在,对Java技术的发展形成了深远的影响。 除了上述的三大革命,Java2 还支持并新增了许多新特性,最受追捧的当属Swing库。Swing 是轻量级的 API,它不但有各式各样先进的组件,而且连组件风格都可抽换。Swing 出现之后,大家很快地就不太使用 AWT 了。但请不要以为 Swing 是用来取代 AWT 的,其实 Swing 是架构在 AWT 之上的, Swing 的出现只是减少程序员直接使用 AWT 的机会,而不会让 AWT 消失。Java2 还废弃了一些API,最重要的莫过于Thread类中对suspend(),resume()和stop()等方法的废弃。由于JDK1.1的集合类库中的Vector类和HashTable类都考虑了同步,在平常的使用中影响效率,所以Java2专门添加了对应的非同步类,并完善了集合类库。 Java2平台能够得到广泛的应用,还应归功于这个时期的一些优秀书籍,比如著名的<<Core Java2>>(卷一和卷二),该书随着JDK版本的变化已经出到第六版。
Java2平台推出后,得到了市场的强烈反响,所以,在2000年5月8日推出的J2SE1.3对J2SE1.2的改进,主要是对各种已有API的加强和对新API的拓展。 数字运算:加入了java.lang.StrictMath,方便我们的一般的数字运算。 新的Timer API:相信大家对其中的java.util.Timer和java.util.TimerTask一定不陌生。 Collections包:加入了一些新的API,方便我们的使用。 虚拟机停止钩子:J2SE1.3还加入了一个强大的功能,那就是虚拟机停止钩子(Virtual Machine Shutdown Hooks),这个功能使得我们能够在虚拟机停止时完成我们自己的操作,比如关闭网络连接或者保存会话状态或者清除临时文件等等。 DNS服务:在JNDI接口方面,加入了一个DNS服务的实现。 Jini实现:J2SE1.3包含了一个Jini实现,这使得我们可以方便地把诸如打印机、摄像机和磁盘驱动设备插入现有网络中,并且能自动搜索已在网上的设备可以提供的服务并享用这些服务。 XML支持:由于计算机网络和XML技术的快速发展, J2SE1.3在Optional API中引入了Java API for XML包。 HotSpot虚拟机:J2SE1.3引入了HotSpot虚拟机。在solaris版的JDK1.3中,已经不支持传统的虚拟机,而Windows版的JDK1.3同时支持传统虚拟机和HotSpot虚拟机。 从上面的分析可以看出,J2SE1.3主要是对J2SE1.2查漏补缺和拓展新的API。从应用领域方面考虑,J2SE1.3已经涵盖了数据库、Web、多媒体、网络、电话、影像、加解密、图形等等大部分的信息技术领域。 在这个时期Java2还有一个重要活动就是推出SCSL(Sun社区源代码许可)许可协议。Sun公司开放源代码项目的“女1号”Danese Cooper在1999年加入公司,负责Sun(包括Java)和开放源代码社区之间的协调工作。Sun一直尽可能在赢利和开放源代码之间寻求更好的平衡。 在J2SE1.3时代,Java2平台得到了充分的发展,各大应用服务器在这个时代渐渐成熟并被广泛采纳,而Java2相关的培训和书籍更是如火如荼,《Thinking in Java》当属不得不推荐的一本。
锁机制:由于旧版的HotSpot虚拟机的锁机制会导制严重的性能和功能问题,J2SE1.4已经改写了该锁机制。 安全API: Java Cryptography Extension(JCE),Java Secure Socket Extension(JSSE)和Java Authentication and Authorization(JAAS)这三大安全API从optional API移到了core API中。这样,J2SE1.4的安全域(SecureRandom)实现可以利用操作系统提供的安全机制,以便缩短应用程序的启动时间。同时从optional API移到core API的功能还有XML处理API和JDBC2.0 API。 RandomAccess标记接口:加入了RandomAccess标记接口,如果一个List实现了该接口,则表示它支持快速的随机访问,这样可以提高List访问的速度。 LinkedHashMap:加入了LinkedHashMap,这是一个插入排序的Map实现,但它的运行速度和HashMap一样快。 反射:很多产品中都要使用反射(Reflection)机制,但大家知道,反射是相当耗时的,所以,J2SE1.4中重写了java.lang.reflect.Field、java.lang.reflect.Method.invoke()、java.lang.reflect.Constructor.newInstance()和Class.newInstance()等方法,使得我们利用反射也能写出高性能的应用程序。 64位计算: J2SE1.4支持64位计算。64位支持使J2SE1.4可以使用超过几百GB的内存,而以前的版本仅可以使用4G以内的内存。内存使用的扩大可以提高程序的运行效率。 新的I/O API: J2SE1.4在API层面最大的变动,就是它更新了原有的java.io包,以及加入了一组更有效率更多功能的新的I/O API。旧的I/O处理是以串流(stream)的方式来存取的,以字节为单位,而新的I/O处理是以块(block)的方式来存取的。一个块可能包含了512字节,而磁盘的存取本就是一个块一个块来进行的,所以新的I/O处理方式对于底层底数据存取更自然更有效率。
在2004年十月J2SE5.0发布的时候,SUN公司这样解释这次版本名称不是J2SE1.5而是J2SE5.0的原因:“从Java诞生至今已有9年时间,而从有J2SE算起也有5个年头了;在这样的背境下,将该版本号从1.5改为5.0可以更好的反映出新版的J2SE的成熟度、稳定性、可伸缩性、安全性。”
{
for(String str : coll)
{
System.out.println(str);
}
}
怎么样?是不是简单了很多? 自动的装箱/拆箱我们以前手工的做装箱(Boxing)/拆箱(unBoxing)操作时,是不是很烦?放心,J2SE5.0提供了自动的装箱/拆箱操作,我们现在可以写如下的代码:
{
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(0,i);
System.out.println(“i的值是”+list.get(0));
}
可变参数数目 J2SE5.0 开始支持Varargs(不固定自变量个数),J2SE5.0中还加入了以前抛弃的枚举和C风格的格式化输出,这应该是为了吸引以前的C开发者吧。毕竟,在C开发中枚举和格式化输出用的是太多了。
并发 J2SE5.0中加入了Java.util.concurrent包,并向集合框架中加入了Queue接口,J2SE5.0还为各种集合提供了并发情况下的实现。
Properties类增强由于XML的普及性应用,J2SE5.0为java.util.Properties类加入了从XML文件中装载属性和把属性值存储到XML文件中的方法。
Annotation功能 J2SE5.0提供了注解(annotation)/元数据(metadata)功能,相信以后的大部分应用产品都将充分利用它的注解而实现产品的各种特性。
其它 J2SE5.0还在多线程(并发机制)、安全、国际化、UI等方面进行了大规模的变更,使得我们能够更方便地进行Java开发。
其实,上面的这些变更,并不是我们程序员非要不可的内容。我们完全可以通过自己的办法来达到这些变更实现的功能。但J2SE5.0的目标就是让我们程序员能够更加方便地进行开发,所以,我们在基于J2SE5.0开发时,应该能够明显的体会到它的易用性。
6.展望
时至今日,J2SE已经发展为一个覆盖面广、效率高、易用性强的技术平台,但Java并没有停止前进的脚步。Mustang版本的J2SE正在紧锣密鼓的开发当中,按以前的惯例,每两年会发布一个全新的J2SE版本,所以Mustang开发版对应的J2SE6.0发布版将在2006年完成。
J2SE6.0的Specification Lead是Sun公司老资格的开发者Mark Reinhold,我们在J2SE1.2中就能看到他的影子。Mark Reinhold曾经是NIO(新的I/O处理) API的Specification Lead,现在是Sun的J2SE架构师与总工程师。Mark Reinhold透露说,J2SE6.0将更易于管理,可以给外部的管理软件提供更多信息。它可以让调试软件在程序运行的时候进行检查,而不是在运行之前,这样更容易找到问题所在。他说,J2SE6.0 将会更好地和图形用户界面集成,包括微软即将发布的Windows 版本Longhorn。
2005年3月23日是Java技术十周年庆典日,在