Java6 JDK 1.6 新特性 總結(jié)大全 附代碼_第1頁(yè)
Java6 JDK 1.6 新特性 總結(jié)大全 附代碼_第2頁(yè)
Java6 JDK 1.6 新特性 總結(jié)大全 附代碼_第3頁(yè)
Java6 JDK 1.6 新特性 總結(jié)大全 附代碼_第4頁(yè)
Java6 JDK 1.6 新特性 總結(jié)大全 附代碼_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、:Desktop類和SystemTray類在JDK1.6中,AWT新增加了兩個(gè)類:Desktop和SystemTray。Desktop:可以用來(lái)打開(kāi)系統(tǒng)默認(rèn)瀏覽器瀏覽指定的URL;打開(kāi)系統(tǒng)默認(rèn)郵件客戶端給指定的郵箱發(fā)郵件;用默認(rèn)應(yīng)用程序打開(kāi)或編輯文件(比如,用記事本打開(kāi)以txt為后綴名的文件);用系統(tǒng)默認(rèn)的打印機(jī)打印文檔;SystemTray可以用來(lái)在系統(tǒng)托盤(pán)區(qū)創(chuàng)建一個(gè)托盤(pán)程序。二:使用JAXB2來(lái)實(shí)現(xiàn)對(duì)象與XML之間的映射JAXB是JavaArchitectureforXMLBinding的縮寫(xiě),可以將一個(gè)Java對(duì)象轉(zhuǎn)變成為XML格式,反之亦然。我們把對(duì)象與關(guān)系數(shù)據(jù)庫(kù)之間的映射稱為ORM,

2、其實(shí)也可以把對(duì)象與XML之間的映射稱為OXM(ObjectXMLMapping)。原來(lái)JAXB是JavaEE的一部分,在JDK1.6中,SUN將其放到了JavaSE中。JDK1.6中自帶的這個(gè)JAXB版本是2.0,比起1.0(JSR31)來(lái),JAXB2(JSR222)用JDK5的新特性Annotation來(lái)標(biāo)識(shí)要作綁定的類和屬性等,這就極大簡(jiǎn)化了開(kāi)發(fā)的工作量。三:StAX解析xmlStAX(JSR173)是JDK1.6.0中除了DOM和SAX之外的又一種處理XML文檔的API。StAX是TheStreamingAPIforXML的縮寫(xiě),一種利用拉模式解析(pull-parsing)XML文檔的

3、API.StAX通過(guò)提供一種基于事件迭代器(Iterator)的API讓程序員去控制xml文檔解析過(guò)程,程序遍歷這個(gè)事件迭代器去處理每一個(gè)解析事件,解析事件可以看做是程序拉出來(lái)的,也就是程序促使解析器產(chǎn)生一個(gè)解析事件然后處理該事件,之后又促使解析器產(chǎn)生下一個(gè)解析事件,如此循環(huán)直到碰到文檔結(jié)束符;代碼如下:test.xml?xmlversion=1.0encoding=UTF8?catalogscatalogid=001Book/catalogcatalogid=002Video/catalog/catalogs源代碼StaxTester.javapackagecom.test;importja

4、va.io.FileNotFoundException;importjava.io.FileOutputStream;space.QName;importjavax.xml.stream.XMLEventReader;importjavax.xml.stream.XMLInputFactory;importjavax.xml.stream.XMLOutputFactory;importjavax.xml.stream.XMLStreamException;importjavax.xml.stream.XMLStreamWriter;importjavax.xml.stream.events.S

5、tartElement;importjavax.xml.stream.events.XMLEvent;publicclassStaxTesterpublicstaticvoidmain(Stringargs)throwsXMLStreamException,FileNotFoundExceptionreadXMLByStAX();/用XMLEventReader解析xml文檔writeXMLByStAX();/用XMLStreamWriter寫(xiě)xml文檔privatestaticvoidreadXMLByStAX()throwsXMLStreamException,FileNotFoundEx

6、ceptionXMLInputFactoryxmlif=XMLInputFactory.newInstance();XMLEventReaderxmler=xmlif.createXMLEventReader(StaxTester.class.getResourceAsStream(test.xml);XMLEventevent;StringBuffeiparsingResult=newStringBuffer();while(xmler.hasNext()event=xmler.nextEvent();if(event.isStartElement()/如果解析的是起始標(biāo)記StartElem

7、ent=event.asStartElement();parsingResult.appe);elseif(event.isCharacters()/如果解析的是文本內(nèi)容parsingResult.append(event.asCharacters().getData();elseif(event.isEndElement()/如果解析的是結(jié)束標(biāo)記parsingResult.appe);System.ut.println(parsingResult);privatestaticvoidwriteXMLByStAX()throwsXMLStreamException,FileNotFoundEx

8、ceptionXMLOutputFactoryxmlof=XMLOutputFactory.newInstance();XMLStreamWriterxmlw=xmlof.createXMLStreamWriter(newFileOutputStream(output.xml);/寫(xiě)入默認(rèn)的XML聲明到xml文檔xmlw.writeStartDocument();xmlw.writeCharactersn);/寫(xiě)入注釋到xml文檔xmlw.writeCommenttestingcomment);xmlw.writeCharactersn);/寫(xiě)入一個(gè)catalogs根元素xmlw.writeS

9、tartElementcatalogs);xmlw.writeNamespacemyNS, HYPERLINK / /);xmlw.writeAttributeowner,paraview);xmlw.writeCharactersn);/寫(xiě)入子元素catalogxmlw.writeStartElement( HYPERLINK / /,catalog);xmlw.writeAttributeid,007);xmlw.writeCharactersApparel);/寫(xiě)入catalog元素的結(jié)束標(biāo)簽xmlw.writeEndElement();/寫(xiě)入catalogs元素的結(jié)束標(biāo)簽xmlw.wr

10、iteEndElement();/結(jié)束XML文檔xmlw.writeEndDocument();xmlw.close();控制臺(tái):BookVideo生成的output.xml!-testingcomment-catalogsxmlns:myNS= HYPERLINK / /owner=paraviewmyNS:catalogid=007Apparel/myNS:catalog/catalogs四:使用CompilerAPI現(xiàn)在我們可以用JDK1.6的CompilerAPI(JSR199)去動(dòng)態(tài)編譯Java源文件,CompilerAPI結(jié)合反射功能就可以實(shí)現(xiàn)動(dòng)態(tài)的產(chǎn)生Java代碼并編譯執(zhí)行這些代

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

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

13、回調(diào)方法。例子如下:MyHttpServer.javapackagecom.test;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;.InetSocketAddress;.httpserver.HttpExchange;.httpserver.HttpHandler;.httpserver.HttpServer;.httpserver.spi.HttpServer

14、Provider;publicclassMyHttpServer/啟動(dòng)服務(wù),監(jiān)聽(tīng)來(lái)自客戶端的請(qǐng)求publicstaticvoidhttpserverService()throwsIOExceptionHttpServerProviderprovider=HttpServerPvider();HttpServerhttpserver=provider.createHttpServer(newInetSocketAddress(8888),100);/監(jiān)聽(tīng)端口8888,能同時(shí)接受100個(gè)請(qǐng)求httpserver.createContext(/myApp,newMyHttpHandler();htt

15、pserver.setExecutor(null);httpserver.start();System.out.println(serverstarted);/Http請(qǐng)求處理類staticclassMyHttpHandlerimplementsHttpHandlerpublicvoidhandle(HttpExchangehttpExchange)throwsIOExceptionStringresponseMsg=ok;/響應(yīng)信息InputStreamin=httpExchange.getRequestBody();/獲得輸入流BufferedReaderreader=newBuffere

16、dReader(newInputStreamReader(in);Stringtemp=null;while(temp=reader.readLine()!=null)System.out.println(clientrequest:+temp);httpExchange.sendResponseHeaders(200,responseMsg.length();/設(shè)置響應(yīng)頭屬性及響應(yīng)信息的長(zhǎng)度OutputStreamout=httpExchange.getResponseBody();/獲得輸出流out.write(responseMsg.getBytes();out.flush();http

17、Exchange.close();publicstaticvoidmain(Stringargs)throwsIOExceptionhttpserverService();Test.javapackagecom.test;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;.HttpURLConnection;.URL;importjava.util.concurren

18、t.ExecutorService;importjava.util.concurrent.Executors;publicclassTestpublicstaticvoidmain(Stringargs)ExecutorServiceexecExecutors.newCachedThreadPool();/測(cè)試并發(fā)對(duì)MyHttpServer的影響for(inti=0;i20;i+)Runnablerun=newRunnable()publicvoidrun()trystartWork();catch(IOExceptione)e.printStackTrace();;exec.execute(

19、run);exec.shutdown();/關(guān)閉線程池publicstaticvoidstartWork()throwsIOExceptionURLurl=newURL( HYPERLINK :8888/myApp :8888/myApp);HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();urlConn.setDoOutput(true);urlConn.setDoInput(true);urlConn.setRequestMethod(POST);/測(cè)試內(nèi)容包Stringteststr=thisisatestm

20、essage;Outputstreamout=urlConn.getOutputStream();out.write(teststr.getBytes();out.flush();while(urlConn.getContentLength()!=-1)if(urlConn.getResponseCode()=200)InputStreamin=urlConn.getInputStream();BufferedReaderreader=newBufferedReader(newInputStreamReader(in);Stringtemp=;while(temp=reader.readLin

21、e()!=null)System.err.println(serverresponse:+temp);/打印收到的信息reader.close();in.close();urlConn.disconnect();六:插入式注解處理API(PluggableAnnotationProcessingAPI)插入式注解處理API(JSR269)提供一套標(biāo)準(zhǔn)API來(lái)處理Annotations(JSR175)JSR269用AnnotationProcessor在編譯期間而不是運(yùn)行期間處理Annotation,AnnotationProcessor相當(dāng)于編譯器的一個(gè)插件,所以稱為插入式注解處理.如果Ann

22、otationProcessor處理Annotation時(shí)(執(zhí)行process方法)產(chǎn)生了新的Java代碼,編譯器會(huì)再調(diào)用一次AnnotationProcessor,如果第二次處理還有新代碼產(chǎn)生,就會(huì)接著調(diào)用AnnotationProcessor,直到?jīng)]有新代碼產(chǎn)生為止.每執(zhí)行一次process。方法被稱為一個(gè)round,這樣整個(gè)Annotationprocessing過(guò)程可以看作是一個(gè)round的序列。七:CommonAnnotationsCommonannotations原本是JavaEE5.0(JSR244)規(guī)范的一部分,現(xiàn)在SUN把它的一部分放到了JavaSE6.0中。隨著Annota

23、tion元數(shù)據(jù)功能(JSR175)加入到JavaSE5.0里面,很多Java技術(shù)(比如EJB,WebServices)都會(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í),也保證JavaSE和JavaEE各種技術(shù)的一致性。八:用Console開(kāi)發(fā)控制臺(tái)程序JDK1.6中提供了java.io.Console類專用來(lái)訪問(wèn)基于字符的控制臺(tái)設(shè)備。你的程序如果要與Wind

24、ows下的cmd或者Linux下的Terminal交互,就可以用Console類代勞。但我們不總是能得到可用的Console,一個(gè)JVM是否有可用的Console依賴于底層平臺(tái)和JVM如何被調(diào)用。如果JVM是在交互式命令行(比如Windows的cmd)中啟動(dòng)的,并且輸入輸出沒(méi)有重定向到另外的地方,那么就可以得到一個(gè)可用的Console實(shí)例。九:對(duì)腳本語(yǔ)言的支持如:ruby,groovy,javascript。JDK6增加了對(duì)腳本語(yǔ)言的支持(JSR223),原理上是將腳本語(yǔ)言編譯成bytecode,這樣腳本語(yǔ)言也能享用Java平臺(tái)的諸多優(yōu)勢(shì),包括可移植性,安全等,另外,由于現(xiàn)在是編譯成bytec

25、ode后再執(zhí)行,所以比原來(lái)邊解釋邊執(zhí)行效率要高很多。加入對(duì)腳本語(yǔ)言的支持后,對(duì)Java語(yǔ)言也提供了以下好處。1、許多腳本語(yǔ)言都有動(dòng)態(tài)特性,比如,你不需要用一個(gè)變量之前先聲明它,你可以用一個(gè)變量存放完全不同類型的對(duì)象,你不需要做強(qiáng)制類型轉(zhuǎn)換,因?yàn)檗D(zhuǎn)換都是自動(dòng)的?,F(xiàn)在Java語(yǔ)言也可以通過(guò)對(duì)腳本語(yǔ)言的支持間接獲得這種靈活性。2、可以用腳本語(yǔ)言快速開(kāi)發(fā)產(chǎn)品原型,因?yàn)楝F(xiàn)在可以Edit-Run,而無(wú)需Edit-Compile-Run,當(dāng)然,因?yàn)镴ava有非常好的IDE支持,我們完全可以在IDE里面編輯源文件,然后點(diǎn)擊運(yùn)行(隱含編譯),以此達(dá)到快速開(kāi)發(fā)原型的目的,所以這點(diǎn)好處基本上可以忽略。3、通過(guò)引入腳

26、本語(yǔ)言可以輕松實(shí)現(xiàn)Java應(yīng)用程序的擴(kuò)展和自定義,我們可以把原來(lái)分布在在Java應(yīng)用程序中的配置邏輯,數(shù)學(xué)表達(dá)式和業(yè)務(wù)規(guī)則提取出來(lái),轉(zhuǎn)用JavaScript來(lái)處理。Sun的JDK6實(shí)現(xiàn)包含了一個(gè)基于MozillaRhino的腳本語(yǔ)言引擎,支持JavaScript,這并不是說(shuō)明JDK6只支持JavaScript,任何第三方都可以自己實(shí)現(xiàn)一個(gè)JSR-223兼容的腳本引擎使得JDK6支持別的腳本語(yǔ)言.十:JavaDB與嵌入式數(shù)據(jù)庫(kù)Derby新安裝了JDK6的程序員們也許會(huì)發(fā)現(xiàn),除了傳統(tǒng)的bin、jre等目錄,JDK6新增了一個(gè)名為db的目錄。這便是Java6的新成員:JavaDB。這是一個(gè)純Java

27、實(shí)現(xiàn)、開(kāi)源的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS),源于Apache軟件基金會(huì)(ASF)名下的項(xiàng)目Derby。從Java6開(kāi)始,應(yīng)用程序不再需要顯式地加載驅(qū)動(dòng)程序了,DriverManager開(kāi)始能夠自動(dòng)地承擔(dān)這項(xiàng)任務(wù)。Derby是IBM送給開(kāi)源社區(qū)的又一個(gè)禮物,是一個(gè)purejava的數(shù)據(jù)庫(kù),現(xiàn)在已經(jīng)被列入到j(luò)ava1.6中。不知道對(duì)于大數(shù)據(jù)量的性能如何,但傳說(shuō)中啟動(dòng)derby只會(huì)給JVM添加2M的內(nèi)存,對(duì)那些小數(shù)據(jù)庫(kù)應(yīng)用,比如像用access那種應(yīng)該是挺有誘惑力的。另外,功能要比access多得多,包括事務(wù)處理,并發(fā),觸發(fā)器都有,管理又簡(jiǎn)單,因此自己用來(lái)做點(diǎn)工具正好合適卜一.JTable的排序和過(guò)濾原

28、來(lái)的JTable基本上是只能顯示數(shù)據(jù),在JDK6新增了對(duì)JTable的排序和過(guò)濾功能,下面代碼演示了這兩個(gè)功能JtableTester.javaimportjava.awt.BorderLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.*;importjavax.swing.table.*;/*authorchinajash*/publicclassJTableTesterstaticStringdata=China,Beijing,Chinese,America,Washington,English,Korea,Seoul,Korean,Japan,Tokyo,Japanese,France,Paris,French,England,London,English,Germany,Berlin,German,;staticStringtitles=Country,Capital,Language;publicstaticvoidmain(Stringargs)DefaultTableModelm二newDefaultTableMode

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論