使用java擴(kuò)展機(jī)制加載所有jar包-java開發(fā)java經(jīng)驗(yàn)技巧

使用java擴(kuò)展機(jī)制加載所有jar包-java開發(fā)java經(jīng)驗(yàn)技巧

ID:27800073

大?。?8.02 KB

頁數(shù):10頁

時(shí)間:2018-12-06

使用java擴(kuò)展機(jī)制加載所有jar包-java開發(fā)java經(jīng)驗(yàn)技巧_第1頁
使用java擴(kuò)展機(jī)制加載所有jar包-java開發(fā)java經(jīng)驗(yàn)技巧_第2頁
使用java擴(kuò)展機(jī)制加載所有jar包-java開發(fā)java經(jīng)驗(yàn)技巧_第3頁
使用java擴(kuò)展機(jī)制加載所有jar包-java開發(fā)java經(jīng)驗(yàn)技巧_第4頁
使用java擴(kuò)展機(jī)制加載所有jar包-java開發(fā)java經(jīng)驗(yàn)技巧_第5頁
資源描述:

《使用java擴(kuò)展機(jī)制加載所有jar包-java開發(fā)java經(jīng)驗(yàn)技巧》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。

1、使用Java擴(kuò)展機(jī)制加載所冇JAR包-編程開發(fā)技術(shù)使用Java擴(kuò)展機(jī)制加載所有JAR包木文由ImportNew?孟冰川翻譯自marxsoftwarc。歡迎加入翻譯小組。轉(zhuǎn)載請見文末要求。Java擴(kuò)展機(jī)制在Java教程中被描述為一種“通過標(biāo)準(zhǔn)可擴(kuò)展的方式來讓Jeivei平臺上所冇應(yīng)用使用自定義API”。正如在理解擴(kuò)展機(jī)制進(jìn)行類加載屮描述的,“擴(kuò)展框架充分使用了類加載代理機(jī)制”。這種機(jī)制會在rt.jar引導(dǎo)(boot)類加載之后,標(biāo)準(zhǔn)classpath的類加載之前,加載擴(kuò)展類。擴(kuò)展目錄的工作機(jī)制在類的加載上與classpat

2、h有點(diǎn)類似。對Java應(yīng)用程序來說,所有擴(kuò)展口錄下JAR文件包含的類都可以訪問。然而,會有-?些關(guān)鍵的不同點(diǎn)。這些區(qū)別會在下面的文字中高亮顯示。特征Classpath擴(kuò)展機(jī)制(可選包)作用域典型的應(yīng)用相關(guān)?-classpath/-cp?java.class.path?可執(zhí)行JARManifest的Class-Path主機(jī)上所有可能的JRE?CLASSPATH環(huán)境變量所有運(yùn)行在特定JRE上的JVM?java.ext.dirs各種主機(jī)上的JRE?Solaris:/usr/jdk/packages/1ib/ext?Linux:

3、/usr/java/packages/lib/ext?Windows:%SystcmRoot%SunJavalibcxt如何指定?jar文件?明確的通過名字來指定(包括?jar)?使用通配符來匹配所有的.j竝擴(kuò)展.classFiles?指定冃錄下的.class文件所有在指定目錄卞的JAR文件都會被加載(即使擴(kuò)展名不是.jar或者沒有擴(kuò)展名)類加載順序引導(dǎo)和擴(kuò)展類加載之后引導(dǎo)類加載之后,classpath上的類加載之前一個(gè)最重要且值得重視的問題是,擴(kuò)展機(jī)制會找出所有jar格式的文件,即使文件后綴名不是.jar。這意

4、味著,改變classpath中的jar文件后綴名以此逃過通配符的篩選,這種方法在擴(kuò)展目錄中行不通。我會用一些簡單的例子來展示一些上而提到的區(qū)別。接下來的兩段代碼是一個(gè)簡單的HelloWorld類和一個(gè)main應(yīng)用程序中的Main類。Main通過調(diào)用main方法來使用HelloWorld類。HelloWorld?javapublicclassHelloWorld{?OverridepublicStringtoStringO{return"Hello,World!;}}Main?javaimportstaticjava.la

5、ng.System.out;publicclassMain{publicstaticvoidmain(finalString[]arguments){out.println(newHelloWorld());}為了展示classpath和擴(kuò)展機(jī)制的主要區(qū)別,我將會把編譯過的HelloWorld.class文件歸檔到一個(gè)jar包里,命名為HelloWorld.jar0并把它放在一個(gè)跟編譯過的Main,class不同的口錄下。為了展示傳統(tǒng)的classpath的使用,我把HelloWorld.jar放在一個(gè)叫做C:hello

6、的目錄下并口會用通配符訪問JAR來給Main使用。下面的兩個(gè)截圖對此進(jìn)行了展示。以上兩個(gè)截圖說明,盡管我刪掉了當(dāng)前目錄下的HelloWorld.class,Java主應(yīng)用仍然能加載它。這是因?yàn)镴avalauncher被告知(通過-classpath這個(gè)可選參數(shù))去C:hello目錄下尋找。使用擴(kuò)展機(jī)制,不需要把類放到當(dāng)前目錄或者指定到classpathF就可以加載。接下來的截圖展示了這一點(diǎn)。上面的截圖說明,當(dāng)某個(gè)類是在擴(kuò)展戸錄下的某個(gè)JAR里,Javalauncher其至不需要把HelloWorld.class放到同一

7、個(gè)目錄卜或者在classpath中指定。這常常被用來說明使用擴(kuò)展機(jī)制的優(yōu)點(diǎn)。因?yàn)樗鶅釉谶@個(gè)JRE(或者可能是主機(jī)上的所冇應(yīng)用)上運(yùn)行的程序都可以不用在classpath上指定就能看到擴(kuò)展目錄下的類。使用傳統(tǒng)classpath方式指導(dǎo)應(yīng)用去加載JAR中的類,包含.class文件的JAR文件必須以.jar結(jié)尾。接下來的截圖展示了當(dāng)把在classpath引用的目錄下的HelleWorld,jar重命名為HclloWorld.backupZ后所發(fā)生的事情。上面這張圖展示了當(dāng)classpath引用的目錄下JAR文件沒有以.jar結(jié)

8、尾時(shí)發(fā)生的NoClassDefFoundError異常??赡苡悬c(diǎn)令人驚訝,擴(kuò)展機(jī)制不是這樣工作的。所冇在擴(kuò)展目錄下的JAR文件,不管后綴名是什么甚至沒冇后綴名都會被加載。接下來的截圖展示了這一點(diǎn)。這張圖展示了,給在擴(kuò)展目錄中的JAR文件重命名為沒有后綴的文件并不妨礙類加載器加載JAR文件中的類。換句話說,類加載機(jī)制是

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。