偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

JDK1.6的九大新特性

開(kāi)發(fā) 后端
本文介紹了JDK1.6的九種新的特性。

一:Desktop類(lèi)和SystemTray類(lèi)

在JDK1.6中,AWT新增加了兩個(gè)類(lèi):Desktop和SystemTray。

前者可以用來(lái)打開(kāi)系統(tǒng)默認(rèn)瀏覽器瀏覽指定的URL,打開(kāi)系統(tǒng)默認(rèn)郵件客戶(hù)端給指定的郵箱發(fā)郵件,用默認(rèn)應(yīng)用程序打開(kāi)或編輯文件(比如,用記事本打開(kāi)以txt為后綴名的文件),用系統(tǒng)默認(rèn)的打印機(jī)打印文檔;后者可以用來(lái)在系統(tǒng)托盤(pán)區(qū)創(chuàng)建一個(gè)托盤(pán)程序。

二:使用JAXB2來(lái)實(shí)現(xiàn)對(duì)象與XML之間的映射

JAXB是Java Architecture for XML Binding的縮寫(xiě),可以將一個(gè)Java對(duì)象轉(zhuǎn)變成為XML格式,反之亦然。

我們把對(duì)象與關(guān)系數(shù)據(jù)庫(kù)之間的映射稱(chēng)為ORM,其實(shí)也可以把對(duì)象與XML之間的映射稱(chēng)為OXM(Object XML Mapping)。原來(lái)JAXB是Java EE的一部分,在JDK1.6中,SUN將其放到了Java SE中,這也是SUN的一貫做法。JDK1.6中自帶的這個(gè)JAXB版本是2.0,比起1.0(JSR 31)來(lái),JAXB2(JSR 222)用JDK5的新特性Annotation來(lái)標(biāo)識(shí)要作綁定的類(lèi)和屬性等,這就極大簡(jiǎn)化了開(kāi)發(fā)的工作量。

實(shí)際上,在Java EE 5.0中,EJB和Web Services也通過(guò)Annotation來(lái)簡(jiǎn)化開(kāi)發(fā)工作。另外,JAXB2在底層是用StAX(JSR 173)來(lái)處理XML文檔。除了JAXB之外,我們還可以通過(guò)XMLBeans和Castor等來(lái)實(shí)現(xiàn)同樣的功能。

三:理解StAX

StAX(JSR 173)是JDK1.6.0中除了DOM和SAX之外的又一種處理XML文檔的API。

StAX 的來(lái)歷:在JAXP1.3(JSR 206)有兩種處理XML文檔的方法:DOM(Document Object Model)和SAX(Simple API for XML)。

由于JDK1.6.0中的JAXB2(JSR 222)和JAX-WS 2.0(JSR 224)都會(huì)用到StAX所以Sun決定把StAX加入到JAXP家族當(dāng)中來(lái),并將JAXP的版本升級(jí)到1.4(JAXP1.4是JAXP1.3的維護(hù)版本)。JDK1.6里面JAXP的版本就是1.4。

StAX是The Streaming API for XML的縮寫(xiě),一種利用拉模式解析(pull-parsing)XML文檔的API.StAX通過(guò)提供一種基于事件迭代器(Iterator)的API讓程序員去控制xml文檔解析過(guò)程,程序遍歷這個(gè)事件迭代器去處理每一個(gè)解析事件,解析事件可以看做是程序拉出來(lái)的,也就是程序促使解析器產(chǎn)生一個(gè)解析事件然后處理該事件,之后又促使解析器產(chǎn)生下一個(gè)解析事件,如此循環(huán)直到碰到文檔結(jié)束符;

SAX也是基于事件處理xml文檔,但卻是用推模式解析,解析器解析完整個(gè)xml文檔后,才產(chǎn)生解析事件,然后推給程序去處理這些事件;DOM采用的方式是將整個(gè)xml文檔映射到一顆內(nèi)存樹(shù),這樣就可以很容易地得到父節(jié)點(diǎn)和子結(jié)點(diǎn)以及兄弟節(jié)點(diǎn)的數(shù)據(jù),但如果文檔很大,將會(huì)嚴(yán)重影響性能。

四:使用Compiler API

現(xiàn)在我 們可以用JDK1.6 的Compiler API(JSR 199)去動(dòng)態(tài)編譯Java源文件,Compiler API結(jié)合反射功能就可以實(shí)現(xiàn)動(dòng)態(tài)的產(chǎn)生Java代碼并編譯執(zhí)行這些代碼,有點(diǎn)動(dòng)態(tài)語(yǔ)言的特征。

這個(gè)特性對(duì)于某些需要用到動(dòng)態(tài)編譯的應(yīng)用程序相當(dāng)有用,比如JSP Web Server,當(dāng)我們手動(dòng)修改JSP后,是不希望需要重啟Web Server才可以看到效果的,這時(shí)候我們就可以用Compiler API來(lái)實(shí)現(xiàn)動(dòng)態(tài)編譯JSP文件,當(dāng)然,現(xiàn)在的JSP Web Server也是支持JSP熱部署的,現(xiàn)在的JSP Web Server通過(guò)在運(yùn)行期間通過(guò)Runtime.exec或ProcessBuilder來(lái)調(diào)用javac來(lái)編譯代碼,這種方式需要我們產(chǎn)生另一個(gè)進(jìn)程去做編譯工作,不夠優(yōu)雅而且容易使代碼依賴(lài)與特定的操作系統(tǒng);Compiler API通過(guò)一套易用的標(biāo)準(zhǔn)的API提供了更加豐富的方式去做動(dòng)態(tài)編譯,而且是跨平臺(tái)的。

五:輕量級(jí)Http Server API

JDK1.6 提供了一個(gè)簡(jiǎn)單的Http Server API,據(jù)此我們可以構(gòu)建自己的嵌入式Http Server,它支持Http和Https協(xié)議,提供了HTTP1.1的部分實(shí)現(xiàn),沒(méi)有被實(shí)現(xiàn)的那部分可以通過(guò)擴(kuò)展已有的Http Server API來(lái)實(shí)現(xiàn),程序員必須自己實(shí)現(xiàn)HttpHandler接口,HttpServer會(huì)調(diào)用HttpHandler實(shí)現(xiàn)類(lèi)的回調(diào)方法來(lái)處理客戶(hù)端請(qǐng)求,在這里,我們把一個(gè)Http請(qǐng)求和它的響應(yīng)稱(chēng)為一個(gè)交換,包裝成HttpExchange類(lèi),HttpServer負(fù)責(zé)將HttpExchange傳給HttpHandler實(shí)現(xiàn)類(lèi)的回調(diào)方法。

六:插入式注解處理API(Pluggable Annotation Processing API)

插入式注解處理API(JSR 269)提供一套標(biāo)準(zhǔn)API來(lái)處理Annotations(JSR 175)

實(shí)際上JSR 269不僅僅用來(lái)處理Annotation,我覺(jué)得更強(qiáng)大的功能是它建立了Java 語(yǔ)言本身的一個(gè)模型,它把method,package,constructor,type,variable, enum,annotation等Java語(yǔ)言元素映射為T(mén)ypes和Elements(兩者有什么區(qū)別?),從而將Java語(yǔ)言的語(yǔ)義映射成為對(duì)象,我們可以在javax.lang.model包下面可以看到這些類(lèi)。 所以我們可以利用JSR 269提供的API來(lái)構(gòu)建一個(gè)功能豐富的元編程(metaprogramming)環(huán)境。

JSR 269用Annotation Processor在編譯期間而不是運(yùn)行期間處理Annotation,Annotation Processor相當(dāng)于編譯器的一個(gè)插件,所以稱(chēng)為插入式注解處理.如果Annotation Processor處理Annotation時(shí)(執(zhí)行process方法)產(chǎn)生了新的Java代碼,編譯器會(huì)再調(diào)用一次Annotation Processor,如果第二次處理還有新代碼產(chǎn)生,就會(huì)接著調(diào)用Annotation Processor,直到?jīng)]有新代碼產(chǎn)生為止.每執(zhí)行一次process()方法被稱(chēng)為一個(gè)"round",這樣整個(gè)Annotation processing過(guò)程可以看作是一個(gè)round的序列。

JSR 269主要被設(shè)計(jì)成為針對(duì)Tools或者容器的API. 舉個(gè)例子,我們想建立一套基于Annotation的單元測(cè)試框架(如TestNG),在測(cè)試類(lèi)里面用Annotation來(lái)標(biāo)識(shí)測(cè)試期間需要執(zhí)行的測(cè)試方法。

七:用Console開(kāi)發(fā)控制臺(tái)程序

JDK1.6中提供了java.io.Console 類(lèi)專(zhuān)用來(lái)訪(fǎng)問(wèn)基于字符的控制臺(tái)設(shè)備。你的程序如果要與Windows下的cmd或者Linux下的Terminal交互,就可以用Console類(lèi)代勞。但我們不總是能得到可用的Console,一個(gè)JVM是否有可用的Console依賴(lài)于底層平臺(tái)和JVM如何被調(diào)用。如果JVM是在交互式命令行(比如Windows的cmd)中啟動(dòng)的,并且輸入輸出沒(méi)有重定向到另外的地方,那么就可以得到一個(gè)可用的Console實(shí)例。

八:對(duì)腳本語(yǔ)言的支持

如: ruby,groovy,javascript。

九:Common Annotations

Common annotations原本是Java EE 5.0(JSR 244)規(guī)范的一部分,現(xiàn)在SUN把它的一部分放到了Java SE 6.0中。

隨著Annotation元數(shù)據(jù)功能(JSR 175)加入到Java SE 5.0里面,很多Java 技術(shù)(比如EJB,Web Services)都會(huì)用Annotation部分代替XML文件來(lái)配置運(yùn)行參數(shù)(或者說(shuō)是支持聲明式編程,如EJB的聲明式事務(wù)),如果這些技術(shù)為通用目的都單獨(dú)定義了自己的Annotations,顯然有點(diǎn)重復(fù)建設(shè),所以,為其他相關(guān)的Java技術(shù)定義一套公共的Annotation是有價(jià)值的,可以避免重復(fù)建設(shè)的同時(shí),也保證Java SE和Java EE 各種技術(shù)的一致性。

下面列舉出Common Annotations 1.0里面的10個(gè)Annotations Common Annotations Annotation Retention Target Description Generated Source ANNOTATION_TYPE,CONSTRUCTOR,F(xiàn)IELD,LOCAL_VARIABLE,METHOD,PACKAGE,PARAMETER,TYPE 用于標(biāo)注生成的源代碼Resource Runtime TYPE,METHOD,F(xiàn)IELD用于標(biāo)注所依賴(lài)的資源,容器據(jù)此注入外部資源依賴(lài),有基于字段的注入和基于setter方法的注入兩種方式Resources Runtime TYPE同時(shí)標(biāo)注多個(gè)外部依賴(lài),容器會(huì)把所有這些外部依賴(lài)注入PostConstruct Runtime METHOD標(biāo)注當(dāng)容器注入所有依賴(lài)之后運(yùn)行的方法,用來(lái)進(jìn)行依賴(lài)注入后的初始化工作,只有一個(gè)方法可以標(biāo)注為PostConstruct PreDestroy Runtime METHOD當(dāng)對(duì)象實(shí)例將要被從容器當(dāng)中刪掉之前,要執(zhí)行的回調(diào)方法要標(biāo)注為PreDestroy RunAs Runtime TYPE用于標(biāo)注用什么安全角色來(lái)執(zhí)行被標(biāo)注類(lèi)的方法,這個(gè)安全角色必須和Container的Security角色一致的。RolesAllowed Runtime TYPE,METHOD用于標(biāo)注允許執(zhí)行被標(biāo)注類(lèi)或方法的安全角色,這個(gè)安全角色必須和Container的Security角色一致的PermitAll Runtime TYPE,METHOD允許所有角色執(zhí)行被標(biāo)注的類(lèi)或方法DenyAll Runtime TYPE,METHOD不允許任何角色執(zhí)行被標(biāo)注的類(lèi)或方法,表明該類(lèi)或方法不能在Java EE容器里面運(yùn)行DeclareRoles Runtime TYPE用來(lái)定義可以被應(yīng)用程序檢驗(yàn)的安全角色,通常用isUserInRole來(lái)檢驗(yàn)安全角色。

注意:
1.RolesAllowed,PermitAll,DenyAll不能同時(shí)應(yīng)用到一個(gè)類(lèi)或方法上

2.標(biāo)注在方法上的RolesAllowed,PermitAll,DenyAll會(huì)覆蓋標(biāo)注在類(lèi)上的RolesAllowed,PermitAll,DenyAll

3.RunAs,RolesAllowed,PermitAll,DenyAll和DeclareRoles還沒(méi)有加到Java SE 6.0上來(lái)

4. 處理以上Annotations的工作是由Java EE容器來(lái)做,Java SE 6.0只是包含了上面表格的前五種Annotations的定義類(lèi),并沒(méi)有包含處理這些Annotations的引擎,這個(gè)工作可以由Pluggable Annotation Processing API(JSR 269)來(lái)做

【編輯推薦】

  1. JDK1.6在LINUX下的安裝配置
  2. 實(shí)現(xiàn)Java中對(duì)象比較的兩個(gè)方法
  3. 初學(xué)Java多線(xiàn)程:使用Synchronized塊同步方法
  4. 初學(xué)Java多線(xiàn)程:使用Synchronized關(guān)鍵字同步類(lèi)方法
  5. 初學(xué)Java多線(xiàn)程:從線(xiàn)程返回?cái)?shù)據(jù)的兩種方法
責(zé)任編輯:雪峰 來(lái)源: 百度空間
相關(guān)推薦

2009-07-08 11:01:59

JDK1.6

2009-07-07 12:55:57

JDK1.6安裝

2009-07-09 15:27:33

JDK1.6配置

2011-04-02 09:45:00

Ubuntu 11.0特性

2011-11-24 14:49:16

JavaJDKWebService

2009-02-01 10:10:00

Java資格認(rèn)證JDK1.4JDK1.6

2015-10-29 09:11:00

特性Ubuntu 15.1Linux

2009-07-07 11:33:06

JDK1.6

2015-10-26 09:04:21

PHP7新特性

2015-11-03 09:21:23

性能Ubuntu 15.1Linux

2009-11-25 08:58:22

SUSE Linux

2024-09-18 07:10:00

2009-07-03 17:40:35

JSP2.0

2010-08-10 09:01:02

FlexSDK4新特性

2010-05-18 15:54:25

IIS 7.0

2010-03-26 14:37:57

Visual Stud

2011-12-14 16:15:17

MySQL

2009-07-08 11:23:54

JDK1.6安裝環(huán)境變量設(shè)置

2010-08-02 14:23:56

FlexBuilder

2011-07-11 10:46:25

Mac OS X Li
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)