版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 入股建酒店合同范例
- 合同范例約定管轄條款
- 共享單車勞務(wù)合同范例
- 倉(cāng)庫(kù)信息主管合同范例
- 冷凍鮮肉購(gòu)銷合同范例
- 合同模板問(wèn)卷調(diào)查
- 外墻裝修勞務(wù)合同范例
- 加工承攬合同范例寫(xiě)
- 公司成立幾合同范例
- 買石料合同范例
- 非政策性退補(bǔ)1
- 學(xué)習(xí)解讀《醫(yī)療保障基金使用監(jiān)督管理?xiàng)l例》PPT課件(帶內(nèi)容)
- 《普通高中生物學(xué)課程標(biāo)準(zhǔn)》(WORD版)
- 礦用風(fēng)門說(shuō)明書(shū)
- 部編人教版三年級(jí)上冊(cè)語(yǔ)文 第21課 《大自然的聲音》第二課時(shí) 教學(xué)課件
- 八年級(jí)數(shù)學(xué)經(jīng)典難題(答案 解析)
- GB/T 37865-2019生物樣品中14C的分析方法氧彈燃燒法
- GB 11121-2006汽油機(jī)油
- 簡(jiǎn)約英文求職簡(jiǎn)歷word模板
- 如何提高語(yǔ)文成績(jī).講課稿
- 超星爾雅影視鑒賞課后答案
評(píng)論
0/150
提交評(píng)論