jdk1.5 beta1新特性和增强功能概述
JavaTM 2 SDK, Standard Edition, Version 1.5.0
新特性和增强功能概述
--------------------------------------------------------------------------------
Java 2 Standard Edition, Version 1.5.0 是主要特性版本。下面列出的一些特性是自前一主要版本 (1.4.0) 以来,在1.5.0 中引入的新特性。
对于新特性中的亮点,也请参见 J2SETM 1.5 简介。 对于具体问题,参见 1.5.0 版本说明。
注意:对于这一 J2SE 1.5.0 BETA1 版本,从本页所链接到的一些文档可能还未更新过。
操作系统与硬件平台
支持的系统配置
64 位 AMD Opteron 处理器
虚拟机
Java 堆自我调整
类数据共享
垃圾收集器工效学
致命错误处理
Java 语言特性
Autoboxing/Unboxing
增强的 for 循环
泛型
元数据
静态导入
类型安全枚举
Varargs
核心库
网络
安全
国际化
Formatter 类
Scanner 类
JavaBeansTM 组件体系结构
集合框架
Java API for XML Processing (JAXP)
位操纵操作
Math 包
Instrumentation 包
序列化
并发实用程序
线程优先级
线程转储 API
监控和管理
集成库
远程方法调用(RMI)
Java 数据库连接(JDBC)
Java 命名和目录接口(JNDI)
用户接口
国际化
Java 声音技术
Java 2DTM 技术
图像 I/O
AWT
Swing
部署
一般部署
Java Web Start 部署
工具和工具体系结构
Java虚拟机工具接口(Java Virtual Machine Tool Interface,JVMTI)
Java平台调试器体系结构(Java Platform Debugger Architecture,JPDA)
Java 编译器(javac)
Javadoc 工具
--------------------------------------------------------------------------------
操作系统与硬件平台
支持的系统配置
有关更多信息,请单击上面的链接。
64 位 AMD Opteron 处理器
对于 J2SE 1.5.0,AMD Opteron 处理器由 Suse Linux 和 Windows 2003 上的服务器虚拟机支持。
--------------------------------------------------------------------------------
虚拟机
Java 堆自我调整
请求 JVM 自我调整 Java 堆大小的选项已经得到改进,现在可以同时考虑应用程序性能和应用程序的内存占用。可以指定应用程序的性能目标,然后 JVM 将调整 Java 堆的大小,以便使用与那些目标一致的最小的应用程序内存占用来满足这些性能目标。
类数据共享
类数据共享特性的目标是为了减少应用程序的启动时间和内存占用。安装进程从系统 jar 文件中把一组类加载到私有的内部表示,然后把那个表示转储到“共享存档”文件。在后续的 JVM 调用期间,那个共享存档映射在内存中,从而减少了加载那些类的开销,并允许在多个 JVM 进程间共享这些类的许多 JVM 元数据。有关更多信息,请单击上面的链接。
垃圾收集器工效学
并行收集器已经得到了增强,现在可以监控和适应应用程序的内存需求。这个适应性策略的目标是,免去为获得最佳性能而调整命令行选项的需要。有关垃圾收集特性的简要介绍,请单击上面的链接。
致命错误处理
致命错误报告机制已经得到了增强,现在可以提供改进的诊断输出和可靠性。
--------------------------------------------------------------------------------
JavaTM 语言特性
有关更多信息,请参见 新语言特性。
Autoboxing/Unboxing
这个工具免去了在原语类型(如 int)及包装器类型(如 Integer)之间进行手工转换的苦差事。参见 JSR 201 .
增强的 for 循环
当在集合和数组中遍历时,这种新语言构造免去了这种苦差事及容易在迭代器和索引变量中出错的倾向。参见 JSR 201 .
泛型
这个长期等待的类型系统增强使得类型或方法可以在各种类型的对象上操作,同时提供编译时类型安全。它在集合框架中添加了编译时类型安全,并免去了泛味的类型转换工作。参见 JSR 14.
元数据
通过启用工具来从源代码的注释中生成规范代码,这种语言特性让您可以避免?谛矶嗷肪持斜嘈凑庵止娣洞搿U獾贾铝恕吧餍浴北喑谭绺瘢谡庵址绺裣拢绦 蛟彼涤Ω米鍪裁矗ぞ呔筒肜醋鏊M彼馊ノぁ案绞粑募保╯ide files)的需要,而这些“附属文件”是要与源代码中的更改保持同步的。不过,信息可以在源文件中维护。参见 JSR 175.
静态导入
这个工具让您避免使用类名来限定静态成员,并且不会有“常量接口反模式”的缺点。参见 JSR 201.
类型安全枚举
这个灵活的面向对象枚举类型工具使您能够使用任意方法和字段创建枚举类型。它提供了类型安全模式(“有效的 Java”第 21 条款)的所有优点,并且不会引起冗长和易于出错。参见 JSR 201.
varargs
这个工具免去了在调用接受可变长度参数列表的方法时,需要手动把变量列表封装到数组中。参见 JSR 201.
--------------------------------------------------------------------------------
核心库
网络
有关添加的网络特性的概述,请单击上面的链接。
安全
这一版本的 J2SE 在安全方面大大增强了。它为安全性令牌提供了更好的支持, 为更多的安全标准(SASL、OCSP 和 TSP)提供了支持,改进了可伸缩性(SSLEngine)和性能,此外在 Crypto 和 Java GSS 方面也提供了许多增强功能。有关更多信息,请参见上面的链接。
国际化
增强功能有:
现在 字符处理是以 4.0 版本的 Unicode 标准为基础的。这就影响了 java.lang 包中的 Character 类和 String 类、java.text 包中的排序规则和双向文本分析功能、java.util.regex 包中的 Character 类及 J2SE 的其他许多部分。作为这一升级的一部分,JSR 204 专家组已经指定了对辅助字符的支持,而且在整个 J2SE 中已经实现了该支持。有关更多信息,请参见 JSR 204 或 Character 类文档。
DecimalFormat 类已经得到了增强,现在可以格式化和解析 BigDecimal 和 BigInteger 值,而不会丢失精确度。这些值的格式化是自动得到增强的;必须启用 setParseBigDecimal 方法才可以进行到 BigDecimal 的解析。
现在,Vietnamese 在 java.util 和 java.text 包中所有的 Locale 敏感功能方面得到了支持。有关支持的 Locale 和写系统的完整信息,请参见 支持的 Locale。
Formatter 类
针对输出样式格式的字符串的解释器 ?? Formatter 类 ?? 为布局调整和对齐、通用的数字、字符串和日期/时间数据以及特定于 Locale 的输出格式提供了支持。通用的 Java 类型,比如 byte、java.math.BigDecimal 和 java.util.Calendar,是得到支持的。针对任意用户类型的有限格式化自定义是通过 java.util.Formattable 接口来提供的。
Scanner 类
java.util.Scanner 类可用于将文本转换成原语或字符串。由于它是基于 java.util.regex 包的,因此它也提供了一种方式来管理正则表达式,该表达式把搜索建立在流、文件数据、字符串或 Readable ?涌诘姆庾靶形╥mplementor)上。
JavaBeans 组件体系结构
已经添加了一个称为 IndexedPropertyChangeEvent 的 PropertyChangeEvent 子类来支持界限属性,该属性使用索引来指出 bean 的更改部分。另外,已经在 PropertyChangeSupport 类中添加了一些方法,用以支持激发索引属性改变事件。
集合框架
集合框架已经通过 下面几个方式 得到了增强:
三个 新语言特性是直接针对集合的:泛型、增强的 for 循环和 Autoboxing。
框架 中已经添加了三个新接口(其中两个是 java.util.concurrent 的一部分):Queue、BlockingQueue 和 ConcurrentMap。
已经添加 了 Queue 的两个具体实现,此外,还添加了一个骨架实现。
已经添加了 5 个模块化 Queue 实现和一个 ConcurrentMap 实现。
提供了专用的 Map 和 Set 实现来同类型安全枚举一起使用。
已经添加了专用的即写即复制(copy-on-write)的 List 和 Set 实现。
为了在大多数集合接口中添加动态类型安全而提供了包装器实现。
提供了几个算法用于操纵集合。
提供了一些方法来为数组计算散列代码和字符串表示。
Java API for XML Processing (JAXP)
单击上面的链接获取详细信息或参阅 JSR 206.
位操纵操作
包装器类(Integer、Long、Short、Byte 和 Char) 现在支持通用位操纵操作,这些操作包括 highestOneBit、lowestOneBit、numberOfLeadingZeros、numberOfTrailingZeros、 bitCount、rotateLeft、rotateRight、reverse、signum 和 reverseBytes。
Math 包
java.math 包包含了下面的增强功能:
BigDecimal 类已经为固定精度浮点计算添加了支持。参见 JSR 13.
Math 和 StrictMath 库包含双曲线超越函数(sinh、cosh 和 tanh)、立方根和基于 10 的对数等。
十六进制浮点数支持 ?? 为允许特定浮点值的精确和可预知的说明,十六进制表示法可用于浮点数的字面值,以及用于 Float 和 Double 中浮点数转换方法的字符串。
Instrumentation 包
新的 java.lang.instrument 包提供了一些服务,这些服务允许 Java 编程代理测试运行在 Java 虚拟机上的程序。
序列化
已经添加了支持来处理 1.5 版本中新增的枚举类型。序列化一个枚举实例的规定不同于序列化一个“普通”可序列化对象的那些规则:枚举实例的序列化表单只包括它的枚举常量名和指出它的 基本枚举类型的信息。反序列化行为也是不同的 ?? 类信息用于查找相应的枚举类,并且为了获取返回的枚举常量,通?褂媚歉隼嗪徒邮盏某A棵吹饔?Enum.valueOf 方法。
并发实用程序
java.util.concurrent、 java.util.concurrent.atomic和 java.util.concurrent.locks 包提供了一个强大的、可扩展的高性能线程处理实用程序框架,比如线程池和 Blocking Queue。这个包使得程序员从需要手工制作这些实用程序中解放出来,其方式与集合框架为数据结构所做的非常相同。此外,这些包为高级并发编程提供了低级 原语。参见 JSR 166 .
线程优先级
线程优先级处理已经更改;参见上面的链接。
线程转储 API
为了提供一种编程方式来获取一个线程或所有线程的堆栈跟踪,在 Thread 类中添加了两个新方法 ?? getStackTrace 和 getAllStackTraces。
监控和管理
这一版本的 J2SE 提供了一些重要的增强功能,用于监控和管理 Java 应用程序和 Java 虚拟机(JVM):
JMXTM 1.2 版本和 JMX Remote API 1.0 版本的 RMI 连接器 ?? JMX API ?? 允许测试用于监控和管理的库和应用程序。RMI 连接器允许远程访问这个规范。有关更多信息,请参见 JMX 文档 和 JMX 规范。
JVM 是使用 JMX 实现的。新的 java.lang.management 包提供了用于监控和管理 Java 虚拟机及它所运行的操作系统的接口。它允许以本地的方式和远程的方式监控和管理运行中的 Java 虚拟机。
通过 JMX 进行 out-of-box 管理 ?? 可以容易安排启动基于 JMX 技术的代理(“JMX 代理”),它可用于远程监控和管理内置的 Java VM 规范或使用 JMX 提供的任何应用程序规范。
通过 SNMP 对 Java VM 规范进行 out-of-box 管理 ?? SNMP 代理只发布 JSR 163 - Java Platform Profiling Architecture 中定义的 Java VM 规范的标准 MIB。通过这个 SNMP 代理发布其他的 MIB(比如应用程序的那些 MIB)是没有得到支持的。
--------------------------------------------------------------------------------
集成库
远程方法调用 (RMI)
RMI 已经在下面几个方面得到了增强:
? 动态生成存根类 ?? 这一版本在运行时添加了动态生成存根类的支持,免去了需要使用 Java 远程方法调用(Java RMI)存根编译器 rmic 来为远程对象预生成存根类。注意,仍然必须使用 rmic 来为远程对象预生成存根类,该远程对象需要支持运行在早期版本的客户端。
从 inetd/xinetd 启动 rmid 或者 Java RMI 服务器 ?? System.inheritedChannel 方法提供的一个新特性使应用序程能够获得继承自启动虚拟机(VM)的某个进程的通道(例如 java.nio.channels.SocketChannel 或 java.nio.channels.ServerSocketChannel)。这种继承的通道可用于服务单个传入连接(例如 SocketChannel),或者接受多个传入连接(例如 ServerSocketChannel)。因此,inetd (Solaris(tm) 操作系统)或 xinetd (Linux) 启动的 Java 网络应用程序现在可以获得从 inetd/xinetd 继承到的 SocketChannel 或 ServerSocketChannel。
Java 数据库连接 (JDBC)
J2SE 1.4 版本中引入的 RowSet 接口是 javax.sql 包的一部分,它提供在组件间传递数据的轻量级方法。
作为开发者的一种辅助,在这一版本中,已经以可以使用 RowSet 对象的 5 种或更多种常见方式实现了 RowSet 接口(比如 JSR 114)。这些实现提供了一个开发人员自由使用的现有标准,或者开发人员可以自由扩展这一标准。
下面是 5 个标准实现:
JdbcRowSet ?? 用于封装为使用 JDBC 技术而实现的结果集或者驱动程序。
CachedRowSet ?? 从它的数据源断开连接,并在除它正从数据源获取数据或把修改的数据写回数据源时之外,独立地进行操作。这使它成为一个轻量级容器,用于存储它可在内存中存储的同样多的数据。
FilteredRowSet ?? 扩展了 CachedRowSet,用于获取数据的子集。
JoinRowSet ?? 扩展了 CachedRowSet,用于从多个 RowSet 对象中获取 SQL JOIN 数据。
WebRowSet ?? 扩展了 CachedRowSet,用于XML数据。它使用标准的 XML Schema 来描述 XML 中的表格组件。
Java 命名和目录接口TM (JNDI)
JNDI 提供了下面的新特性。
为了从目录/命名服务访问全名,增强了 javax.naming.NameClassPair。
为 标准 LDAP 控制提供支持:管理参考控制(Manage Referral Control)、分页结果控制和排序控制。
为 LDAP 名称的操纵提供了支持。
--------------------------------------------------------------------------------
用户接口
国际化
为了使用逻辑字体呈现多语言文本,2D 现在利用所有支持的书写系统的已安装主机操作系统字体。例如,如果您在泰国语环境中,但已经安装了韩国语的字体,就可以呈现泰国语和韩国语。
在 Windows 2000/XP 中,AWT 现在使用 Unicode API。因此它的一些文本组件可以处理文本,而不用受到 Windows locale 设置的限制。例如,AWT 文本组件可以在梵文书写系统中接受和显示文本,而不用关心 Windows locale 的设置。
Java 声音技术
现在端口可在所有平台上使用(RFE 4782900)。
现在 MIDI 设备 I/O 可在所有平台上使用(RFE 4812168 和 RFE 4782924)。
在所有平台上实现了优化的直接音频访问 (RFE 4908240 和 RFE 4908879)。在提供本机混合的系统上(如具有硬件混合的 Linux ALSA、启用的 Solaris Mixer 和 Windows DirectSound),默认情况下启用了它。
新的实时序列与所有 MIDI 设备一起工作,并允许无限地进行传送(RFE 4773012)。
sound.properties 配置文件允许选择默认设备(RFE 4776511)。 有关更多信息,请参见 MidiSystem 和 AudioSystem。
MidiDevices 可以查询连接的接收器和传送器(RFE 4931387, MidiDevice.getReceiver 和 MidiDevice.getTransmitter 方法)。
AudioFormat、AudioFileFormat 和 MidiFileFormat 现在具有一些属性来允许进一步描述和限定格式 (RFE 4925767 和 RFC 4666845)。
一组易用的方法集允许更加容易地从 AudioSystem 检索行(RFE 4896221)。
序列接口是用循环方法扩展的,它可以在 MIDI 序列的特定部分进行无缝循环。(RFE 4204105)。
Java Sound 不再禁止 VM 退出(bug 4735740)。
Java 2DTM 技术
添加的 2D 特性包括扩展的 Linux 和 Solaris 打印机支持、用于从文件和流中创建字体的新方法和与 VolatileImages 和图像的硬件压缩有关的新方法。对文本呈现代码的大量更改大大提高了它的强健性、性能和可伸缩性。其他性能工作包括在 Linux 和 Solaris 上使用 OpenGL 进行硬件加速呈现(默认情况下是禁用的)。
图像 I/O
图像 I/O 系统现在具有针对 BMP 和 WBMP 格式的阅读器和编写器。
AWT
1.5 版本提供了许多 AWT 增强功能和修补程序,其中包括一些客户经常要求的一些增强功能和修补程序。特别是新的 MouseInfo 类使得可以决定桌面上鼠标的位置。新的 Window 方法使得可以根据平台来指定最近创建的窗体(或帧)的默认位置。另一个窗口增强功能使得可以保证窗体(或帧)总是处在最上层(对于 Solaris/Linux 上的一些窗体处理器,这种特性是不能工作的)。在数据转换方面,新的 DropTargetDragEvent API 使得在拖动过程中可以让目标访问传送的数据。
Swing
在 1.4.2 版本中,我们为 Swing 提供了两种外观:XP 和 GTK。但这没有到此就停止,在 1.5 中我们提供了另外两种外观:Synth ?? 可切换皮肤的外观和 Ocean ?? 针对 Metal 的新主题。除了外观之外,我们已经对 JTable 添加了打印支持,这使得可以容易地获取 JTable 的漂亮打印副本。最后在七年后,我们使得 jFrame.add 等价于 jFrame.getContentPane().add()。
--------------------------------------------------------------------------------
部署
一般部署
Pack200 是由 JSR 200 定义的新的针对 JAR 文件的超压缩格式,它可以大大减小 Java Webstart 应用程序和 Java 插件 applet 中使用的 JAR 文件的下载大小。
要简要了解一般部署特性和增强功能,请单击上面的“一般部署”链接。
Java Web Start 部署
要简要了解 Java Web Start 部署的特性和增强功能,请单击上面的链接。
--------------------------------------------------------------------------------
工具和工具体系结构
Java 虚拟机工具接口(Java Virtual Machine Tool Interface,JVMTI)
JVMTI 是开发和监控工具所使用的本机编程接口。它提供了一种方法,用于检查在 Java 虚拟机(VM)中运行的应用程序的状态,并控制它的执行。JVMTI 的设计目的是为需要访问 VM 状态的全宽度工具提供 VM 接口,其中包括但不局限于下面这些工具:profiling、调试、监控、线程分析和覆盖分析等工具。
在下一个 J2SE 主要版本中,JVMTI 将替换现在否决的 JVMPI 和 JVMDI。
Java 平台调试器体系结构(Java Platform Debugger Architecture,JPDA)
JPDA 本身具有许多新特性,JPDA 增强功能 页详细描述了这些特性。
已经定义了 JDI 的一个只读子集。这个子集可在特定的调试对象上使用,在该调试对象中,不可以执行任何调试代码(比如核心文件、挂起的进程或在调试模式中尚未启动的进程)。这个子集使得可以创建在像调试对象这样的调试中使用的 JDI 连接器。
连接器和传输的服务提供程序使得调试器供应商或者甚至最终用户可以创建自己的 JDI 连接器和传输,并把它们插入到 JPDA 的参考实现中。例如,可以提供一个连接器,让它使用 SSL 在调试器和调试对象间进行通信。
JDI 支持新语言特性(泛型、枚举和 varargs)。
JPDA 的最低层 ?? Java 虚拟机调试器接口(JVMDI)?? 已经被否决,在下一个 J2SE 主要版本中将删除它。替代它的将是 Java 虚拟机工具接口(JVMTI)。这个更加通用的接口使得可以在调试的同时也执行 profiling。当前的 profiling 接口 ?? Java 虚拟机 profiling 接口(Java Virtual Machine Profiling Interface,JVMPI)也被否决了,在下一个主要版本中也会删除它。
JPDA 参考实现包括新的 JDI 连接器,它允许调试核心文件和挂起的进程。
Java 编译器 (javac)
编译器选项包括:
-source 1.5 ?? 使得可以在源文件中使用特定于 1.5 的语言特性(默认情况下是包括 -target 1.5 选项的)。
- target 1.5 ?? 使得 javac 可以在库和虚拟机中使用特定于 1.5 的特性。
-Xlint ?? 使得 javac 能够产生有关合法、但值得怀疑,而且通常是有问题的程序结构的警告消息。一个例子是声明一个实现 Serializable 的类,但却没有定义 serialVersionUID。
-d32 ?? 指出 32 位的 Solaris 或 Linux 平台。
-d64 ?? 指出 64 位 Solaris 或 Linux 平台。
Javadoc工具
参见 Javadoc 1.5.0 中的新特性。