jdk6新特性

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JDK6.0(Mustang)
综述
✓2006 年底,Sun 公司发布了Java Standard
Edition 6(Java SE 6)的最终正式版,代号Mustang(野马)
✓跟Tiger(Java SE 5)相比,在性能方面有了不错
的提升,但在API 库方面的新特性略少
✓提供了许多实用和方便的功能:脚本,Web service,XML,编译器API,数据库,JMX,网络和Instrumentation 方面都有不错的新特性和功能加强
✓下面列举了一些主要的特性:
◆Web Services
◆Scripting
◆Database
◆More Desktop APIs
◆Monitoring and Management ◆Compiler Access
◆Pluggable Annotations
◆Network
◆Console
Web Services and XML
Common Annotations
JAXB2
StAX
Web Services metadata
Common Annotations
✓Common annotations原本是Java EE 5.0(JSR 244)规范的一部分,现在SUN把它的一部分放到了Java SE 6.0中
✓为其他相关的Java技术定义一套公共Annotation,避免重复建设,保证Java SE和Java EE 各种技术的一致性
随着Annotation元数据功能(JSR 175) 加入到Java SE 5.0里面,很多Java 技术(比如EJB,Web Services)都会用Annotation部分代替XML文件来配置运行参数(或者说是支持声明式编程,如EJB的声明式事务), 如果这些技术为通用目的都单独定义了自己的Annotations,显然有点重复建设
这些注解在javax.annotation 包中,共有五个注解,下面给出了列举: Annotation Retention Target Description
Generated SOURCE PACKAGE,
用于标记已生成的源代码
TYPE,
ANNOTATION_TY
PE,
METHOD,
CONSTRUCTOR,
FIELD,
LOCAL_VARIABLE,
PARAMETER
PostConstruct RUNTIME METHOD用于在依赖关系注入完成之后需要执
行的方法上,以执行任何初始化
PreDestroy RUNTIME METHOD作为回调通知用于各方法,以表示该
实例正处于被容器移除的过程中
Resource RUNTIME TYPE,FIELD,
标记应用程序所需的资源
METHOD
Resources RUNTIME TYPE 用于允许多个资源声明
JAXB2
✓原来JAXB是Java EE的一部分,在JDK6中,SUN 将其放到了Java SE中
✓JAXB是Java Architecture for XML Binding的缩写,可以将一个Java对象转变成为XML格式,反之亦然✓比起1.0版本(JSR 31)来,JAXB2(JSR 222)用JDK5的新特性Annotation来标识要作绑定的类和属性等,极大简化了开发的工作量
✓JAXB2在底层用StAX(JSR 173)来处理XML文档
主要处理类在javax.xml.bind包中,如下:
JAXBContext提供到JAXB API 的客户端入口点。

它提供了管理
实现JAXB 绑定框架操作所需的XML/Java 绑定信
息的抽象,这些操作包括:解组、编组和验证Marshaller 负责管理将Java 内容树序列化回XML 数据的过
程。

它提供了基本的编组方法Unmarshaller 管理将XML 数据反序列化为新创建的Java 内容
树的过程,并可在解组时有选择地验证XML 数据。

它针对各种不同的输入种类提供各种重载的
unmarshal 方法
主要注解类在javax.xml.bind.annotation包中
定义了将Java 程序元素定制成XML 模式映射的注释,主要如下:
Annotation Retention Target Description XmlRootElement RUNTIME TYPE将类或枚举类型映射到
XML 元素
XmlElement RUNTIME FIELD,
METHOD 将JavaBean 属性映射到派生于属性名称的XML 元素
XmlAttribute RUNTIME FIELD,
METHOD 将JavaBean 属性映射到XML 属性
StAX
✓StAX是The Streaming API for XML的缩写,一种利用拉模式解析(pull-parsing)XML文档的API
✓StAX通过提供一种基于事件迭代器(Iterator)的API 让程序员去控制xml文档解析过程,程序遍历这个事件迭代器去处理每一个解析事件,解析事件可以看做是程序拉出来的,也就是程序促使解析器产生一个解析事件然后处理该事件,之后又促使解析器产生下一个解析事件,如此循环直到碰到文档结束符✓SAX也是基于事件处理xml文档,但却是用推模式解析,解析器解析完整个xml文档后,才产生解析事件,然后推给程序去处理这些事件
javax.xml.stream包中,主要接口见下图: 处理类主要在
接口描述
XMLEventReader此类是用于解析XML 事件的顶层接口
XMLEventWriter此类是用于编写XML 文档的顶层接口
XMLStreamReader XMLStreamReader 接口允许转发XML 和
对XML 的只读访问
XMLStreamWriter XMLStreamWriter 接口指定如何编写XML
Web Services metadata
✓用元数据功能来标注要暴露成Web Service的方法✓是一组元数据,在javax.jws包中,下表列举了这些
metadata
Annotation Retention Target Description
HandlerChain RUNTIME TYPE,
METHOD,
FIELD 将Web Service 与外部定义的处理程序链关联
Oneway RUNTIME METHOD指示给定@WebMethod 只有
一条输入消息并且没有输出WebMethod RUNTIME METHOD定制一个公开为Web Service
操作的方法
WebParam RUNTIME PARAMETER定制单个参数到Web Service
消息部分和XML 元素的映射关

WebResult RUNTIME METHOD定制返回值到WSDL 部分和
XML 元素的映射关系WebService RUNTIME TYPE 将Java 类标记为实现Web
Service,或者将Java 接口标
记为定义Web Service 接口
测试和发布
JDK6提供了一个很简单的机制可以用来测试和发布Web Services,步骤如下:
a)将<JAVA_HOME>/bin加入path环境变量
b)在命令行下切换当前目录到项目的class文件所在的目录,运行下面命令
wsgen -cp . WebServices.WSProvider
在这个例子中会生成以下3个类的源代码文件及class文件
SayHi SayHiResponse PrintTime
c)执行如下代码:
Endpoint.publish("http://localhost:8888/welcome/WSProvider",new WSProvider());
就可以将WSProvider发布到
http://localhost:8888/welcome/WSProvider
a)在浏览器输入http://localhost:8888/welcome/WSProvider?wsdl就可以
看到生成的WSDL文件
Scripting
✓JDK6增加了对脚本语言的支持(JSR 223)✓对脚本的好处:
◆将脚本语言编译成bytecode,这样脚本语言也能享用Java平台的诸多优势,包括可移植性,安全等
◆由于编译成bytecode后再执行,所以比原来边解释边执行效率要高很多
✓对Java语言也提供了以下好处:
◆脚本语言不需要用一个变量之前先声明它,可以用
一个变量存放完全不同类型的对象,不需要做强制类型转换,因为转换都是自动的, Java语言可以通过对脚本语言的支持间接获得这种灵活性
◆可以用脚本语言快速开发产品原型
◆通过引入脚本语言可以轻松实现Java应用程序的扩
展和自定义,可以把原来分布在在Java应用程序中的配置逻辑,数学表达式和业务规则提取出来,转用JavaScript来处理。

可扩展性
Sun的JDK6实现包含了一个基于Mozilla Rhino的脚本语言引擎,支持JavaScript
可以通过实现如下两个接口来实现对其他脚本的支持:
javax.script.ScriptEngine
javax.script.ScriptEngineFactory
可以将实现ScriptEngine改为继承自AbstractScriptEngine
Scripting API
Scripting API是用于在Java里面编写脚本语言程序的API, 在Javax.script包中, 这个包里面有一个ScriptEngineManager类, 它是使用Scripting API的入口,ScriptEngineManager 可以通过jar服务发现(service discovery)机制寻找合适的脚本引擎类(ScriptEngine) ,可以利用Scripting API实现以下功能:
a)暴露Java对象为脚本语言的全局变量
b)在Java中调用脚本语言的方法
c)脚本语言可以实现Java的接口
d)脚本语言可以像Java一样使用JDK平台下的

✓Scripting Tool
◆SUN提供的JDK6中有一个命令行工具:jrunscript,可以在<JAVA_HOME>/bin下面找到这个工具
◆jrunscript是一个脚本语言的解释程序,它独立于脚本语言,但默认是用JavaScript,可以用jrunscript来测试自己写的脚本语言是否正确
◆下面是一个简单例子:
jrunscript
js>println("Hello,JrunScript");
Hello,JrunScript
js>9*8
72.0
js>
Database
数据库Derby
JDBC4.0
数据库Derby
✓Derby是由IBM捐献Apache的DB项目的一个纯Java数据库,JDK6.0里的Derby的版本是10.2.1.7
✓支持关系数据库中的所有企业级的特性,包括崩溃恢复、事务回滚和提交、行/表级锁、视图、主键/外键约束、触发器、子查询表达式,等等
✓JDK6里的Derby支持JDBC 4.0规范
✓安装JDK6.0后,Derby会被安装到
%JAVA_HOME%/db里面
✓Derby有两种运行模式,一种是作为嵌入式模式,另一种是作为网络服务器模式
✓嵌入式模式(Embedded Framework)
◆Derby 嵌入到Java程序中运行. 当程序装载
本地JDBC驱动的时候启动Derby的引擎. 当程序终止的时候, 关闭Derby的引擎. 在同一时刻一个应用程序只能存取一个数据库.
◆以嵌入式数据库集成到应用程序中,只需要
将derby.jar放入到项目的classpath中就行
✓网络服务器模式(Server Framework)
◆是一个一直运行着的Java应用程序,允许多重,远程的
JDBC 应用程序连接到Derby.
◆以网络数据库形式集成到应用程序中,只需将derby自带
的derbynet.jar,derbyclient.jar或者使用IBM 提供的DB2 JDBC Universal Driver:db2jcc.jar,db2jcc_license_c.jar 放入到项目的classpath中。

启动网络数据库有如下两种方式:
a)在系统命令行中输入
Java workServerControl start
a)双击
C:\Java\jdk1.6.0_01\db\frameworks\NetworkServer\bin目录下的startNetworkServer.bat
✓使用Derby
◆Derby 提供了一个称为ij 的命令行工具
◆它是interactive JDBC scripting tool的缩写, 使用该工具能
够连接和操纵Derby数据库.
◆在使用该工具之前必须把下面的jar文件放到classpath中:
derby.jar 包含了JDBC驱动
derbytools.jar 包含了ij 工具
◆配置完classpath后, 打开ij 并且连接到Derby自带的样
例数据库toursdb:
c:\>java org.apache.derby.tools.ij
ij version 10.2
ij> connect
‘jdbc:derby:C:\Java\jdk1.6.0_01\db\demo\databases\toursdb’;
ij>
◆打开连接后即可输入各种sql语言进行数据
操作
✓关于Derby更详细的资料可以参见如下网页: a)/derby/docs/10.2/ref/ref-
single.html
b)/developerworks/cn/views/op
ensource/tutorials.jsp?cv_doc_id=102957
JDBC4.0
自动装载JDBC drivers
SQLExceptions
数据类型支持
API 的变化
自动装载JDBC drivers
✓在先前的版本里JDBC 4.0, 客户端应用程序需要装载驱动类:
Class.forName(“org.apache.derby.jdbc.ClientDriver”);✓在新版本中需要数据库提供商标记驱动类在jar中的META-INF.services\java.sql.Driver文件中
✓在这个文本文件中定义了一行实现了java.sql.Driver 接口的类,DriverManager为您提供了注册的处理✓只需要数据库URL, 用户名, 密码通过DriverManager的getConnection方法即可与数据库取得连接
异常处理
✓增加了一些简单而有力的异常处理机制, 其中值得一提的是链式异常,如果这个异常链存在的话,即可应用增强了的for-each 循环来获取异常链
✓SQLException 的子类
java.sql.SQLClientInfoException
java.sql.SQLDataException
java.sql.SQLFeatureNotSupportedException
java.sql.SQLIntegrityConstraintViolationException
java.sql.SQLInvalidAuthorizationSpecException
java.sql.SQLSyntaxErrorException
java.sql.SQLTransactionRollbackException
java.sql.SQLTransientConnectionException
数据类型支持
SQLXML
SQLXML 是新增的一个接口,是SQL 中XML 数据类型在Java中的表示,XML 是SQL 中用于表示表中XML数据的内建数据类型. 在默认的情况下,JDBC 驱动将SQLXML 指针指向XML 数据而不是数据本身. SQLXML 对象在其被创建的事务中是稳定的
✓ROWID 数据类型
SQL ROWID 唯一标识了数据表中的一行,并是访问该行的最快的方法,本版增加了RowId 接口以提供对ROWID SQL 数据类型在Java 类中的支持.
✓对大对象类型支持的增强
JDBC 版本2 提供了对大的SQL 对象如:CLOB , BLOB , ARRAY 的支持, 及用于添加相关接口的Struct: Clob , Blob , Array , and Struct . 在本版的JDBC 中增加了很多对这些对象访问的新方法.
API 的变化
✓Array
Array 接口增加了一个free 方法来释放array 对象及其持有的资源.
✓Connection 和PooledConnection
Connection 接口现在提供一系列创建大对象的方法如
createClob , createBlob 等等. 此外还有getter 和setter 对客户端信息的重载方法, 及验证当前连接正确性的方法.
PooledConnection 接口当前提供
addStatementEventListener 和
removeStatementEventListener 两个方法来注册和注销
StatementEventListener 接口, 这个接口是在本版JDBC 中新引入的. 这个接口的一个实例将获取到S tatement 池中PreparedStatement s 的变化. 比如,在注册以后, 当驱动调用statementClosed 方法时,所有StatementEventListener 将获得statement 已关闭的通知.
More Desktop APIs
Desktop类
SystemTray类
JTable的排序和过滤
Desktop类
✓Desktop 类允许Java 应用程序启动已在本机桌面上注册的关联应用程序,以处理URI 或文件。

✓支持的操作包括:
a)启动用户默认浏览器来显示指定的URI
b)启动带有可选mailto URI 的用户默认邮件客户端
c)启动已注册的应用程序,以打开、编辑或打印指定的文件
✓此类提供与这些操作对应的方法。

这些方法查找在当前平台上注册的关联应用程序,并启动该应用程序来处理URI 或文件。

如果没有关联应用程序或关联应用程序无法启动,则抛出异常。

✓应用程序被注册为URI 或文件类型, 注册, 访问和启动关联应用程序的机制与平台有关。

✓每个操作都是由Desktop.Action类表示的一种动作类型。

SystemTray类
✓SystemTray 类表示桌面的系统托盘。

在windows 上,它被称为“任务栏状态区域”,在Gnome 上,它被称为“通知区域”,在KDE 上,它被成为“系统托盘”
✓系统托盘由运行在桌面上的所有应用程序共

✓在某些平台上,可能不存在或不支持系统托盘,在这种情况下,getSystemTray()将抛出UnsupportedOperationException, 要检查系
统托盘是否受支持,可以使用isSupported()
每个Java 应用程序都有一个SystemTray 实例,在应用程序运行时,它允许应用程序与桌面系统托盘建立连接,SystemTray 实例可以通过getSystemTray()方法获得, 应用程序不能创建自己的SystemTray 实例
JTable的排序和过滤
新添加了javax.swing.table包中的TableRowSorter 类与javax.swing 包中的RowFilter<M,I>类分别用来实现表格的排序与过滤
Jconsole
Jconsole
✓Java SE 平台提供了一个图形化的监视工具,称为Jconsole,实现了JMX API,使你能够监视java虚拟机以及任何应用程序的性能,由
jdk5.0引入, 在jdk6中成为正式支持的特性之一✓一些增强如下:
a)JConsole Plugin 支持, 允许你构建自己的插件在JConsole 中运行
例如: 添加一个定制标签来存取你的应用程序的MBeans
b)动态绑定能力,允许将JConsole 连接到任何支持dynamic Attach API 的应用程序
c)增强的用户界面使得数据更加容易存取
d)新的”概述”和”VM摘要”标签,更好的表示关于你的JVM的一般信息
e)热诊断MBean, 提供API在运行时请求堆内存并且能够改变一些VM选项的设置
f)改良的MBeans表现, 使得更加容易的存取MBeans 的方法和属性
Compiler Access
✓JDK6提供了一组CompilerAPI可以在程序运行时编译类
✓要想拥有动态生成并且运行类能力,应该需要如下步骤:
a)生成.java源文件
b)将.java源文件编译成.class文件
c)实例化该类,以供使用
✓生成.java源文件,借助IO操作即可完成
✓实例化类文件,借助反射即可完成
✓使用JDK1.4就可完成上面所需的一,三步骤✓而步骤二在JDK6以前的版本中是没有提供实
现的,新加入的CompilerAPI无疑使之成为可能
✓处理API主要集中在javax.tools软件包中,主要接口如下:
Diagnostic<S>用于来自工具的诊断的
接口DiagnosticListener<S>用于接收来自工具的诊
断的接口JavaCompiler从程序中调用Java™
编程语言编译器的接口JavaFileObject在Java™ 编程语言源
和类文件上进行操作的
工具的文件抽象StandardJavaFileManager基于java.io.File 的文件
管理器
Pluggable Annotations
✓插入式注解处理API
(JSR 269)提供一套标准API处理Annotations ✓将Java语言的语义映射成为对象
把method, package, constructor, type, variable, enum, annotation等Java语言元素映射为Types和Elements ,从而建立了Java 语言本身的一个模型
✓在编译期间而不是运行期间处理Annotation Annotation Processor相当于编译器的一个插件,所以称为插入式注解处理.如果Annotation Processor 处理Annotation时(执行process方法)产生了新的Java代码,编译器会再调用一次Annotation Processor,如果第二次处理还有新代码产生,就会接着调用Annotation Processor,直到没有新代码产生为止.每执行一次process()方法被称为一个"round",这样整个Annotation processing过程可以看作是一个round的序列.
✓主要被设计成为针对Tools或者容器的API
Http Server
✓JDK6提供了一个简单的Http Server API
✓可以构建自己的嵌入式Http Server, 它支持Http和Https协议,提供了HTTP1.1的部分实现,没有被实现的那部分可以通过扩展已有的Http Server API来实现
✓程序员必须自己实现HttpHandler接口,HttpServer会调用HttpHandler实现类的回调方法来处理客户端请求
✓把一个Http请求和它的响应称为一个交换,包装成HttpExchange类,HttpServer负责将HttpExchange 传给HttpHandler实现类的回调方法
Console
✓JDK6中提供了java.io.Console类专用来访问基于字符的控制台设备
✓如果程序要与windows下的cmd或者linux下的terminal交互,就可以用Console类
✓不总是能得到可用的Console
一个JVM是否有可用的Console依赖于底层平台和JVM如何被调用. 如果JVM是在交互式命令行(比如Windows的cmd)中启动的,并且输入输出没有重定向到另外的地方,那么就可以得到一个可用的Console实例。

相关文档
最新文档