J2SE
发展演变史
(作者:
HongSoft
及
Will
)(《程序员》)
1.J2SE :怀胎
Java 的历史可以追溯到 1991 年 4 月, Sun 公司的 James Gosling 领导的绿色计划 (Green Project) 开始着力发展一种分布式系统结构,使其能够在各种消费性电子产品上运行,他们使用了 C/C++/Oak 语言。由于电子产品种类繁多,运行环境各不相同,使得用这些语言进行开发的软件必须为不同的电子产品而专门设计,所以项目组疲于奔命,消费性电子产品软件环境的发展无法达到预期的目标,绿色计划也陷于停滞状态。
1.J2SE :怀胎
Java 的历史可以追溯到 1991 年 4 月, Sun 公司的 James Gosling 领导的绿色计划 (Green Project) 开始着力发展一种分布式系统结构,使其能够在各种消费性电子产品上运行,他们使用了 C/C++/Oak 语言。由于电子产品种类繁多,运行环境各不相同,使得用这些语言进行开发的软件必须为不同的电子产品而专门设计,所以项目组疲于奔命,消费性电子产品软件环境的发展无法达到预期的目标,绿色计划也陷于停滞状态。
直至
1994
年下半年,由于
Internet
的迅猛发展和环球信息网
WWW
的快速增长,第一个全球信息网络浏览器
Mosaic
诞生了;此时,工
业界
对适合在网络异构环境下使用的语言有一种非常急迫的需求;
Games Gosling
决定改变绿色计划的发展方向,他们对
Oak
进行了小规模的改造,就这样,
Java
在
1995
年的
3
月
23
日
诞生了!
Java
的诞生标志着
互联网
时代的开始,它能够被应用在全球信息网络的平台上编写互动性及强的
Applet
程序,而
1995
年的
Applet
无疑能给人们无穷的视觉和脑力震荡。
但没有相应的开发库而只靠 Java 语言来进行开发肯定是困难重重,所以 Sun 公司在 1996 年的 1 月 23 日 发布了 JDK1.0 来帮助开发人员的开发。 JDK 包括两大部分:运行环境和开发工具。而运行环境包括五大部分:核心 API ,集成 API ,用户界面 API ,发布技术, Java 虚拟机 (JVM) 。 Java 能够在信息网络时代快速发展,得益于它独特的组成结构,它并不直接被编译成所在平台的机器语言然后执行,而是先被编译成字节码,然后才到装有 JVM 的 硬件 上运行,所以它能够跨平台运行;而且,不是一定要使用 Java 语言来写程序才能编译成 Java 字节码,我们用 C/C++/JavaScript 等语言来写程序也可以编译出 JVM 要求的字节码文件。在这个时期,人们使用最多的 Java API 无疑地就是 AWT ,因为 JDK 1.0 时只有 AWT 称得上是一组完整的 Framework ,其它 Java API 都比较偏向个别的 class 。
紧跟着, Sun 公司在 1997 年 2 月 18 日 发布了 JDK1.1 。 JDK1.1 相对于旧版本最大的改进,是推出了 JIT(Just-In-Time) 编译器。传统的 JVM 收到一道字节码指令后,解释成机器码,马上执行该机器码,然后丢掉该机器码,再接收下一道字节码指令 …… 即便是以前执行过的字节码指令,依然需要重新解释成机器码才能执行。而 JIT 编译器会把常执行的部分先解释好放在内存,以后再次执行该指令时,不用再解释,直接从内存中取出机器码就可以执行了,这样提高了不少的效率。
在 JDK1.1 时代, Java 平台分为 PersonalJava 与 EmbeddedJava ,前者比较适用于运算资源和内存丰富的设备,而资源有限者适用于后者。这样的分类明显不符合时代发展的潮流,所以, Java 平台处处蕴藏着新的翻天覆地的革命 ……
但没有相应的开发库而只靠 Java 语言来进行开发肯定是困难重重,所以 Sun 公司在 1996 年的 1 月 23 日 发布了 JDK1.0 来帮助开发人员的开发。 JDK 包括两大部分:运行环境和开发工具。而运行环境包括五大部分:核心 API ,集成 API ,用户界面 API ,发布技术, Java 虚拟机 (JVM) 。 Java 能够在信息网络时代快速发展,得益于它独特的组成结构,它并不直接被编译成所在平台的机器语言然后执行,而是先被编译成字节码,然后才到装有 JVM 的 硬件 上运行,所以它能够跨平台运行;而且,不是一定要使用 Java 语言来写程序才能编译成 Java 字节码,我们用 C/C++/JavaScript 等语言来写程序也可以编译出 JVM 要求的字节码文件。在这个时期,人们使用最多的 Java API 无疑地就是 AWT ,因为 JDK 1.0 时只有 AWT 称得上是一组完整的 Framework ,其它 Java API 都比较偏向个别的 class 。
紧跟着, Sun 公司在 1997 年 2 月 18 日 发布了 JDK1.1 。 JDK1.1 相对于旧版本最大的改进,是推出了 JIT(Just-In-Time) 编译器。传统的 JVM 收到一道字节码指令后,解释成机器码,马上执行该机器码,然后丢掉该机器码,再接收下一道字节码指令 …… 即便是以前执行过的字节码指令,依然需要重新解释成机器码才能执行。而 JIT 编译器会把常执行的部分先解释好放在内存,以后再次执行该指令时,不用再解释,直接从内存中取出机器码就可以执行了,这样提高了不少的效率。
在 JDK1.1 时代, Java 平台分为 PersonalJava 与 EmbeddedJava ,前者比较适用于运算资源和内存丰富的设备,而资源有限者适用于后者。这样的分类明显不符合时代发展的潮流,所以, Java 平台处处蕴藏着新的翻天覆地的革命 ……
2.J2SE1.2
:诞生
JDK1.2 在 1998 年 12 月 4 日 的隆重发布,标志着 Java2 平台的诞生。 Java2 的 J2SE1.2 时代是一个大变革时代,它进行了如下的三大革命:
JDK1.2 在 1998 年 12 月 4 日 的隆重发布,标志着 Java2 平台的诞生。 Java2 的 J2SE1.2 时代是一个大变革时代,它进行了如下的三大革命:
*
市场推广革命
在 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 分为三大类:
在 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 分为三大类:
Java Core API
:由
Sun
公司制定的基本的
API
,所有的
Java
平台都应该提供。这就是我们平常所说的
Java
核心类库。
Java Optional API
:由
Sun
公司制定的扩充
API
,
Java
平台可以有选择地提供。比如,
JFC
以前是
Sun
对
JDK
的功能扩展,不是
Java
的公共规范。
Java2
平台则包含了
JFC
技术
,
不需要再扩展了。
特殊
API
:由特殊厂商或者组织提供的
API
。比如,美国法律对出口中国的加解密算法的安全强度有一定的限制,
Java
平台中不能包括一些安全强度较高的加密解密算法,所以部分其它国家的公司,如加拿大的
BouncyCastle
公司等,可以提供一些自己的安全
API
。
* 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 版本的变化已经出到第六版。
* 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 版本的变化已经出到第六版。
3. J2SE1.3
:拓广
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 》当属不得不推荐的一本。
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 》当属不得不推荐的一本。
4. J2SE1.4
:快速
J2SE1.4 平台的推出发生在 2002 年 2 月 13 日 ,由于此前在 Java 平台和 .net 平台间发生了规模浩大的孰优孰劣的论战,而论战中, Java 平台最大的缺点就是性能问题,所以 J2SE1.4 平台把性能的改善放在了最重要的位置。
HotSpot 虚拟机: HotSpot 虚拟机能够很大程度上提高性能,所以 J2SE1.4 已经不支持传统的虚拟机。现在,启动应用程序应该通过 -client 或者 -server 选项来启动,如果你还是通过 -classic 选项来启动,会收到这样的错误提示: ”Error : Classic VM no longer supported 。 ”
锁机制: 由于旧版的 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 处理方式对于底层底数据存取更自然更有效率。
J2SE1.4 平台的推出发生在 2002 年 2 月 13 日 ,由于此前在 Java 平台和 .net 平台间发生了规模浩大的孰优孰劣的论战,而论战中, Java 平台最大的缺点就是性能问题,所以 J2SE1.4 平台把性能的改善放在了最重要的位置。
HotSpot 虚拟机: HotSpot 虚拟机能够很大程度上提高性能,所以 J2SE1.4 已经不支持传统的虚拟机。现在,启动应用程序应该通过 -client 或者 -server 选项来启动,如果你还是通过 -classic 选项来启动,会收到这样的错误提示: ”Error : Classic VM no longer supported 。 ”
锁机制: 由于旧版的 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 处理方式对于底层底数据存取更自然更有效率。
断言和日志处理:
J2SE1.4
版本在
Java
语言层面上加入了断言(
assert
关键字),在
API
层面上加入日志处理
API
,这些为程序的调试提供了强有力的支持
。
从上面的分析可以看出, Java 2 平台在经过数年的发展后,已经比较成熟稳定, J2SE1.4 主要是对平台的性能进行较多的考虑和修改。在分布式程序方面, 1.4 版比 1.3 版的运行效率提高了一半以上;而在客户端程序方面, 1.4 版比 1.3 版的效率提高了 1/3 。当然 , 除了考虑运行效率, J2SE1.4 还有其它方面的改进,如推出了一个全新的运行 Java 应用程序的方法 Java Web Start ,该方法克服了 Java Applet 的安全性限制的问题和 Java Application 的软件发布难的问题,并结合了上面两种方法的好处,为 Java 软件客户提供了非常友好的使用体验。
J2SE1.4 版是 J2SE 第一个参与了 Java 共同体过程 (JCP) 的 J2SE 版本。 象 Borland 、 Compaq 、 Fujitsu 、 SAS 、 Symbian 、 IBM 这样的公司,和 Sun 一起定义并发展了 J2SE 1.4 规范。在开放、良好的文档编撰与管理的过程中,形成了一个高质量的、代表了 Java 共同体的多样性的规范。 J2SE1.4 的 Specification Lead 是 Doug Kramer 。 Doug Kramer 是优秀的 Java 开发人员和著名的教育培训专家,他同时还是 J2SE1.4.2 的 Specification Lead 和 J2SE1.5 的 JVM 的 Specification Lead 。
从上面的分析可以看出, Java 2 平台在经过数年的发展后,已经比较成熟稳定, J2SE1.4 主要是对平台的性能进行较多的考虑和修改。在分布式程序方面, 1.4 版比 1.3 版的运行效率提高了一半以上;而在客户端程序方面, 1.4 版比 1.3 版的效率提高了 1/3 。当然 , 除了考虑运行效率, J2SE1.4 还有其它方面的改进,如推出了一个全新的运行 Java 应用程序的方法 Java Web Start ,该方法克服了 Java Applet 的安全性限制的问题和 Java Application 的软件发布难的问题,并结合了上面两种方法的好处,为 Java 软件客户提供了非常友好的使用体验。
J2SE1.4 版是 J2SE 第一个参与了 Java 共同体过程 (JCP) 的 J2SE 版本。 象 Borland 、 Compaq 、 Fujitsu 、 SAS 、 Symbian 、 IBM 这样的公司,和 Sun 一起定义并发展了 J2SE 1.4 规范。在开放、良好的文档编撰与管理的过程中,形成了一个高质量的、代表了 Java 共同体的多样性的规范。 J2SE1.4 的 Specification Lead 是 Doug Kramer 。 Doug Kramer 是优秀的 Java 开发人员和著名的教育培训专家,他同时还是 J2SE1.4.2 的 Specification Lead 和 J2SE1.5 的 JVM 的 Specification Lead 。
5. J2SE5.0:
易用
在 2004 年十月 J2SE5.0 发布的时候, SUN 公司这样解释这次版本名称不是 J2SE1.5 而是 J2SE5.0 的原因: “ 从 Java 诞生至今已有 9 年时间,而从有 J2SE 算起也有 5 个年头了;在这样的背境下,将该版本号从 1.5 改为 5.0 可以更好的反映出新版的 J2SE 的成熟度、稳定性、可伸缩性、安全性。 ”
在 2004 年十月 J2SE5.0 发布的时候, SUN 公司这样解释这次版本名称不是 J2SE1.5 而是 J2SE5.0 的原因: “ 从 Java 诞生至今已有 9 年时间,而从有 J2SE 算起也有 5 个年头了;在这样的背境下,将该版本号从 1.5 改为 5.0 可以更好的反映出新版的 J2SE 的成熟度、稳定性、可伸缩性、安全性。 ”
J2SE
的这次变更之重大和意义之深远,的确也值得我们为之把版本号变换到
J2SE5.0
。我们再看看
Sun
公司网站对
J2SE5.0
的
features
描述:
“
通过增强
Java
平台的力量,允许开发者更容易地使用,
Java
编程语言的这些改进将吸引大量各种
Java
开发者
”
,这是
“Java
技术发展历程的一个重要里程碑
”
。从这个描述我们可以看出,
J2SE5.0
最大的目标是通过提供易用性而吸引各种开发者
(
当然包括以前的
C/C++
开发者
)
,而它对以前版本的修改并不仅仅是
API
的升级,而且包括对
Java
语言层面的改进。
访问环境变量: 最初的 Java 语言有一个访问环境变量的方法 System.getenv() ,但因为 Java 宣称的 ”Write Once,Run AnyWhere” 特性,所以在 JDK1.0 中去掉了这个能够访问平台专有信息的方法。在 J2SE5.0 中,它又来了,并有所扩充。由此可见 J2SE5.0 对编程方便性的重视程度。
泛型 J2SE5.0 提供了强大的泛型机制,让程序员可以减少代码重复,这个变化应该可以吸引小部分的 C# 开发人员吧。
增强的 for 循环 为了克服普通 for 循环的代码臃肿特点, J2SE5.0 提供了增强的 for 循环,我们现在可以这样写一个 for 循环:
访问环境变量: 最初的 Java 语言有一个访问环境变量的方法 System.getenv() ,但因为 Java 宣称的 ”Write Once,Run AnyWhere” 特性,所以在 JDK1.0 中去掉了这个能够访问平台专有信息的方法。在 J2SE5.0 中,它又来了,并有所扩充。由此可见 J2SE5.0 对编程方便性的重视程度。
泛型 J2SE5.0 提供了强大的泛型机制,让程序员可以减少代码重复,这个变化应该可以吸引小部分的 C# 开发人员吧。
增强的 for 循环 为了克服普通 for 循环的代码臃肿特点, J2SE5.0 提供了增强的 for 循环,我们现在可以这样写一个 for 循环:
public void printAll(Collection<String> coll)
{
for(String str : coll)
{
System.out.println(str);
}
}
{
for(String str : coll)
{
System.out.println(str);
}
}
怎么样?是不是简单了很多?
自动的装箱 / 拆箱 我们以前手工的做装箱 (Boxing)/ 拆箱 (unBoxing) 操作时,是不是很烦 ? 放心, J2SE5.0 提供了自动的装箱 / 拆箱操作,我们现在可以写如下的代码:
public void boxing(int i)
{
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(0,i);
System.out.println(“i 的值是 ”+list.get(0));
}
{
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(0,i);
System.out.println(“i 的值是 ”+list.get(0));
}
并发 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 技术十周年庆典日,在这十年的发展中, Java 平台吸引了四百万开发者,在网络计算遍及全球的今天,更是有 17.5 亿台设备使用了 Java 技术。作为 Java 技术的基础, J2SE 的功绩不可掩没,我们期望 J2SE 伴随 Java 平台一路走好!