學(xué)好JAVA最關(guān)鍵幾點(diǎn)_第1頁(yè)
學(xué)好JAVA最關(guān)鍵幾點(diǎn)_第2頁(yè)
學(xué)好JAVA最關(guān)鍵幾點(diǎn)_第3頁(yè)
已閱讀5頁(yè),還剩11頁(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、學(xué)好JA V A最關(guān)鍵幾點(diǎn)(包含jar命令詳解第一個(gè)是path和CLASSPATH的問(wèn)題第二個(gè)是package和import問(wèn)題第三個(gè)是public , protected , private , static什 么時(shí)候用,為什么要用,怎么用第四個(gè)是制作jar文件第一個(gè),path和CLASSPATH的問(wèn)題什么是path是你的JDK的工作路徑例如你的jdk安裝在C:/jdk/此時(shí)的你的path (如果原來(lái)沒有PATH設(shè)置為PATH ;C:/jdk/ bin什么是 ClasspathClasspath是Java中的重要概念,它描述了 Java虛擬機(jī)在運(yùn)行一個(gè) Class時(shí)在 哪些路徑中加載要運(yùn)行的

2、類以及運(yùn)行的類要用到的類。簡(jiǎn)單的說(shuō),當(dāng)一個(gè)程序找 不到他所需的其他類文件時(shí),系統(tǒng)會(huì)自動(dòng)到CLASSPATH環(huán)境變量所指明的路徑中 去 查找第三方提供的類和用戶定義的類,Classpath和Java包的關(guān)系Java的包(Package和 classpath關(guān)系密切。包是以"."分割的,SUN建議使用 域 名的逆向排列來(lái)區(qū)分不同的包,以避免沖突,如。在一個(gè) 包里的類 在存儲(chǔ)的時(shí)候需要存儲(chǔ)在和包名相同的目錄里,如上述pa ny .util包中的Sample.class要存儲(chǔ)在com'company'util目錄中。Classpath有兩種表達(dá)方式,一種 是指向目錄

3、的 classpath,如 C:workclasses,表示 C:workclasses目錄是一個(gè) classpath條目;另一種方式是指向壓縮文件 的classpath如C:workutil.jar ,表示C:workutil.jar文件是一個(gè)classpath條目,任何一個(gè)包含Java類的zip格式的壓縮文 件都可以作為classpath的條目。那么classpath和包到底是什么關(guān)系呢?簡(jiǎn)單的說(shuō),就是Java虛擬機(jī)在加載類 的 時(shí)候以這樣一種方式查找具體的類文件:classpath +包存儲(chǔ)的目錄+具體的類文件。 如classpath中有一個(gè)c:workclasses條目,需要加載的類是

4、那么在加載這個(gè)類的時(shí)候,虛擬機(jī)會(huì)查找 c:workclassescomcompany'util目錄,如果 Sample.class在這個(gè)目錄中,虛擬機(jī)就可 以找到,如果這個(gè)類不在這個(gè)目錄中,同時(shí)也不在任何一個(gè)其它c(diǎn)lasspath中,那么虛擬 機(jī)會(huì)拋出一個(gè) ClassNotFoundException。Classpath的順序和類版本沖突Java虛擬機(jī)在加載類的時(shí)候查找 classpath是有順序的,如果在classpath中有多 個(gè)條目都有同一個(gè)名稱的類,那么在較前位置的類會(huì)被加載,后面的會(huì)被忽 略。這 種按照順序的類加載可能會(huì)導(dǎo)致類的版本沖突。例如classpath =c:serv

5、let2.2servlet.jar ; c:servlet2.3servlet.jar,那么在實(shí)際應(yīng)用的 過(guò)程中,你使用的 是servlet2.2而不是servlet2.3。很多時(shí)候如果不注意這一點(diǎn),可能會(huì)導(dǎo)致奇怪的異 常。命令行狀態(tài)下的classpath設(shè)置命令行狀態(tài)下的classpath可以通過(guò)兩種方式設(shè)置。一種是直接設(shè)置環(huán)境變量,例如在windows環(huán)境下,我們使用set命令:setclasspath=c:workclasses; c:workutil.jar另一種方式是在執(zhí)行javac、java或者其它Java命令時(shí)直接指定classpath :java -classpath c:wo

6、rkclasses;c:workutil.jar pa ny .util.Sam plepackage和 import 問(wèn)題Java中的包(Package其實(shí)指的就是目錄,它是為了更好地管理Java類(Class和 接口(Interface。Java語(yǔ)言的包可以被另一個(gè)Java開發(fā)包所使用。如果我 們要引用 某個(gè)包中的類,用import關(guān)鍵字來(lái)標(biāo)明即可Package行要在import行之前Package打包后將生成在Classpath指明的路徑下例如 Classpath 為 C:/testPackage com.dir結(jié)果為 將在C:/test目錄下生成com子目錄,目錄com包含dir目錄

7、所有的文 件將放在dir目錄在Java中對(duì)象的體現(xiàn)在包的定義和應(yīng)用中,對(duì)于已經(jīng)編好的類,如果在新類中 要使用,應(yīng)將已經(jīng)定義的類包含近來(lái),Java中用import語(yǔ)句實(shí)現(xiàn).使用import語(yǔ)句的加入所有類(以上面Package打包為例import com.dir.*;使用import語(yǔ)句的加入特指類(以上面Package打包為例,假如目錄中存在hello.classimport com.dir.hello;第三public , protected , private , static什 么時(shí)候用,為什么要用,怎 么用每個(gè)類都創(chuàng)造了有自己的名字空間,指方法和變量可以知道彼此的存在,可以使 用。pu

8、blic類不但可以被同一程序包中的其它類使用,別的程序包中的類也可以使用;變量和方法的修飾字 public、protected> private :public:任何其他類、對(duì)象只要可以看到這個(gè)類的話,那么它就可以存取變 數(shù)據(jù),或使用方法。class ABCpublic int pub_i=5;public void show(System.out.pri ntln ("pub_i"+pub_i;class Demopublic static void main( Stri ng argsABC abc= new ABC(;System.out.pri ntl n(&

9、quot;abc.pub_i"+abc.pub_i;abc.pub_i=10;abc.show(;protected變量和方法:如果一個(gè)類中變量或方法有修飾字 protected同一類、同一包可以使用。 包的類要使用,必須是該類的子類,可以存取變量或調(diào)用量的不同public class ABCprotected int pro_i=5;protected void show(System.out.pri ntl n("pro_i=" +pro_i; 同包的類:class DEFpublic static void main( Stri ng argsABC abc

10、= new ABC(;System.out.pri ntl n("_i="+_i;abc.pub_i=10;abc.show(;不同包但是是子類:import mytest.pack.ABC;class DEF exte nds ABCpublic static void main( Stri ng agrsDEF def= new DEF(;System.out.pri ntln( def.i;def.i=10;def.show(;private不允許任何其他類存取和調(diào)用;當(dāng)子類中的變量名與父類的相同,原來(lái)的變量被遮蓋。方法的覆蓋(overri

11、ding和重載(overloading。子孫類中定義的方法和祖先類中 某個(gè)方法同名、同參數(shù)行,則祖先類中的該方法被覆蓋;方法的重載是指一個(gè)對(duì)象 的多態(tài)性,即多個(gè)方法用相同的名稱,但參數(shù)行不同。fin al:final在方法之前,防止該方法被覆蓋;final在類之前,標(biāo)是該類不能被繼承;final在變量之前,定義一個(gè)常量。static:在變量或方法之前,表明它們是屬于類的;靜態(tài)變量在各實(shí)例間共享,如果是public靜態(tài)變量,則其它類可以不通過(guò)實(shí) 例 化訪問(wèn)它們;靜態(tài)方法稱為類的方法,因此不用實(shí)例化即可調(diào)用(面向過(guò)程一個(gè)對(duì)象的方法可以訪問(wèn)對(duì)象的數(shù)據(jù)成員,盡管不屬于方法的局部變量;一個(gè)類的方法只能訪

12、問(wèn)自己的局部變量。例:不正確的引用class StaticErrorStri ng mystri ng="hello"public static void main( Stri ng argsSystem.out.pri ntl n(m ystri ng;錯(cuò)誤信息:ca n't make a static refere nee to non static variable為什么不正確?只有對(duì) 象的方法可以訪問(wèn)對(duì)象的變量。解決的辦法:1將變量改稱類變量class StaticErrorstatic Stri ng mystri ng="hello"

13、public static void main( Stri ng argsSystem.out.pri ntl n(m ystri ng;2先創(chuàng)建一個(gè)類的實(shí)例class NoStaticErrorpublic static void main( Stri ng argsStri ng mystri ng="hello"System.out.pri ntl n(m ystri ng;第四個(gè),制作jar文件JAR文件就是Java Archive File,顧名思意,它的應(yīng)用是與Java息息相關(guān)的,是Java的一種文檔格式。JAR文件非常類似ZIP文件一一準(zhǔn)確的說(shuō),它就 是ZIP

14、文件, 所以叫它文件包。JAR文件與ZIP文件唯一的區(qū)別就是在JAR文件的內(nèi)容中,包含了一個(gè) META-INF/MANIFEST.MF 文件,這個(gè)文件是在生成JAR文件的時(shí)候自動(dòng)創(chuàng)建的1. JAR文件包JAR文件就是Java Archive File,顧名思意,它的應(yīng)用是與Java息息相關(guān)的,是Java的一種文檔格式。JAR文件非常類似ZIP文件一一準(zhǔn)確的說(shuō),它就 是ZIP文件, 所以叫它文件包。JAR文件與ZIP文件唯一的區(qū)別就是在JAR文件的內(nèi)容中,包 含了一個(gè) META-INF/MANIFEST.MF 文件,這個(gè)文件是在生成JAR文件的時(shí)候自動(dòng)創(chuàng)建的。舉個(gè)例子,如果我們具有如下目錄結(jié)構(gòu)的

15、一些 文件:'-test'-Test.class把它壓縮成ZIP文件test.zip則這個(gè)ZIP文件的內(nèi)部目錄結(jié)構(gòu)為:test.zip'-test-Test.class如果我們使用JDK的jar命令把它打成JAR文件包test.jar則這個(gè)JAR文件的內(nèi)部目錄結(jié)構(gòu)為:test.jar|- META-INF| '- MANIFEST.MF'-test'-Test.class2.創(chuàng)建可執(zhí)行的JAR文件包制作一個(gè)可執(zhí)行的JAR文件包來(lái)發(fā)布你的程序是JAR文件包最典型的用法。Java程序是由若干個(gè).class文件組成的。這些.class文件必須根據(jù)它們所

16、屬的包不同而分級(jí)分目錄存放;運(yùn)行前需要把所有用到的包的根目錄指定 給 CLASSPATH環(huán)境變量或者java命令的-cp參數(shù);運(yùn)行時(shí)還要到控制臺(tái)下去 使用 java命令來(lái)運(yùn)行,如果需要直接雙擊運(yùn)行必須寫 Windows的批處理文 件(.bat或者 Linux的Shell程序。因此,許多人說(shuō),Java是一種方便開 發(fā)者苦了用戶的程序設(shè)計(jì)其實(shí)不然,如果開發(fā)者能夠制作一個(gè)可執(zhí)行的 JAR文件包交給用戶,那么用戶 使用起來(lái)就方便了。在 Win dows下安裝JRE (Java Run time En viro nment的 時(shí)候,安 裝文件會(huì)將.jar文件映射給javaw.exe打開。那么,對(duì)于一個(gè)可

17、執(zhí) 行的JAR文件包, 用戶只需要雙擊它就可以運(yùn)行程序了 ,和閱讀.chm文檔一樣方便(.chm文檔默認(rèn)是 由hh.exe打開的。那么,現(xiàn)在的關(guān)鍵,就是如何來(lái)創(chuàng)建這個(gè)可執(zhí)行的JAR文件 包。創(chuàng)建可執(zhí)行的JAR文件包,需要使用帶cvfm參數(shù)的jar命令,同樣以上述test 目錄為例,命令如下:jar cvfm test.jar man ifest.mf test這里test.jar和manifest.mf兩個(gè)文件,分別是對(duì)應(yīng)的參數(shù)f和m,其重頭 戲在 manifest.mf。因?yàn)橐獎(jiǎng)?chuàng)建可執(zhí)行的JAR文件包,光靠指定一個(gè)manifest.mf文件是不夠的,因?yàn)镸ANIFEST是JAR文件包的特征,

18、可執(zhí)行 的JAR文件包和不可執(zhí)行的JAR文件包都包含MANIFEST。關(guān)鍵在于可執(zhí) 行 JAR文件包的MANIFEST,其內(nèi)容包含了 Main-Class 項(xiàng)。這在MANIFEST中書寫格式如下:Main-Class:可執(zhí)行主類全名(包含包名例如,假設(shè)上例中的Test.class是屬于test包的,而且是可執(zhí)行的類(定義了public static void main(String方法,那么這個(gè) manifest.mf 可以 編輯如下:Mai n-Class: test.Test <回車 >這個(gè)manifest.mf可以放在任何位置,也可以是其它的文件名,只需要有Mai n-Cla

19、ss: test.Test 一行,且該行以一個(gè)回車符結(jié)束即可。創(chuàng)建了 manifest.mf文件之后,我們的目錄結(jié)構(gòu)變?yōu)椋簗- test| '- Test.class-man ifest.mf這時(shí)候,需要到test目錄的上級(jí)目錄中去使用jar命令來(lái)創(chuàng)建JAR文件包。也 就是在目錄樹中使用“=表示的那個(gè)目錄中,使用如下命令:jar cvfm test.jar man ifest.mf test之后在“=”錄中創(chuàng)建了 test.jar,這個(gè)test.jar就是執(zhí)行的JAR文件包。運(yùn)行時(shí) 只需要使用java -jar test.jar命令即可。需要注意的是,創(chuàng)建的JAR文件包中需要包含完整的

20、、與 Java程序的包結(jié)構(gòu) 對(duì)應(yīng)的目錄結(jié)構(gòu),就像上例一樣。而Main-Class指定的類,也必須是完整的、包含包路徑的類名,如上例的test.Test而且在沒有打成JAR文件包之前可 以使用java <類 名 >來(lái)運(yùn)行這個(gè)類,即在上例中java test.Test是可以正確 運(yùn)行的(當(dāng)然要在 CLASSPATH正確的情況下。jar命令詳解jar是隨JDK安裝的,在JDK安裝目錄下的bin目錄中,Windows下文件名 為 jar .exe , Linux下文件名為jar。它的運(yùn)行需要用到JDK安裝目錄下lib目錄中的tools.jar文件。不過(guò)我們除了安裝JDK什么也不需要做,因?yàn)?/p>

21、 SUN已經(jīng)幫我們做好了。我們甚至不需要將tools.jar放至 U CLASSPATH 中。使用不帶任何的jar命令我們可以看到j(luò)ar命令的用法如下:jar ctxuvfmOM jar -文件manifest-文件-C 目錄文件名.其中ctxu是jar命令的子命令,每次jar命令只能包含ctxu中的一個(gè),它們分 別表示:-c創(chuàng)建新的JAR文件包-t列出JAR文件包的內(nèi)容列表-x展開JAR文件包的指定文件或者所有文件-u更新已存在的JAR文件包(添加文件到JAR文件包中vfmOM中的選項(xiàng)可以任選,也可以不選,它們是jar命令的選項(xiàng)參數(shù)-v生成詳細(xì)報(bào)告并打印到標(biāo)準(zhǔn)輸出-f指定JAR文件名,通常這

22、個(gè)參數(shù)是必須的-m指定需要包含的MANIFEST清單文件-0只存儲(chǔ),不壓縮,這樣產(chǎn)生的JAR文件包會(huì)比不用該參數(shù)產(chǎn)生的體積大,但速 度更快-M不產(chǎn)生所有項(xiàng)的清單(MANIFEST丨文件,此參數(shù)會(huì)忽略-m參數(shù)jar -文件即需要生成、查看、更新或者解開的JAR文件包,它是-f參數(shù)的 附屬參數(shù)manifest-文件即MANIFEST清單文件,它是-m參數(shù)的附屬參數(shù)-C目錄表示轉(zhuǎn)到指定目錄下去執(zhí)行這個(gè)jar命令的操作。它相當(dāng)于先使 用 cd命令轉(zhuǎn)該目錄下再執(zhí)行不帶-C參數(shù)的jar命令,它只能在創(chuàng)建和更 新JAR文件 包的時(shí)候可用。文件名指定一個(gè)文件/目錄列表,這些文件/目錄就是要添加到JAR文件包

23、中的文件/目錄。如果指定了目錄,那么jar命令打包的時(shí)候會(huì)自動(dòng)把該目錄中 的 所有文件和子目錄打入包中。下面舉一些例子來(lái)說(shuō)明jar命令的用法:1 jar cf test.jar test該命令沒有執(zhí)行過(guò)程的顯示,執(zhí)行結(jié)果是在當(dāng)前目錄生成了 test.jar文件。如 果當(dāng)前目錄已經(jīng)存在test.jar那么該文件將被覆蓋。2 jar cvf test.jar test該命令與上例中的結(jié)果相同,但是由于v參數(shù)的作用,顯示出了打包過(guò)程,如下:標(biāo)明清單(ma nifest增加:test/(讀入=0 (寫出=0(存儲(chǔ)了 0%增加:test/Test.class讀入=7 (寫出=6(壓縮了 14%3 jar

24、 cvfM test.jar test該命令與2結(jié)果類似,但在生成的test.jar中沒有包含META-INF/MANIFEST 文件打包過(guò)程的信息也略有差別:增加:test/(讀入=0 (寫出=0(存儲(chǔ)了 0%增加:test/Test.class讀入=7 (寫出=6(壓縮了 14%4 jar cvfm test.jar ma ni fest.mf test運(yùn)行結(jié)果與2相似,顯示信息也相同,只是生成JAR包中的META-INF/MANIFEST 內(nèi)容不同,是包含了 manifest.mf的內(nèi)容5 jar tf test.jar在test.jar已經(jīng)存在的情況下,可以查看test.jar中的內(nèi)容

25、,如對(duì)于2和3生成的test.jar分別應(yīng)該此命令,結(jié)果如下;對(duì)于2META-INF/META-INF/MANIFEST.MFtest/test/Test.class對(duì)于3test/test/Test.class6 jar tvf test.jar除顯示5中顯示的內(nèi)容外,還包括包內(nèi)文件的詳細(xì)信息,如:0 Wed Jun 19 15:39:06 GMT 2002 META-INF/86 Wed Jun 19 15:39:06 GMT 2002 META-INF/MANIFEST.MF0 Wed Jun 19 15:33:04 GMT 2002 test/7 Wed Jun 19 15:33:04

26、 GMT 2002 test/Test.class7 jar xf test.jar解開test.jar到當(dāng)前目錄,不顯示任何信息,對(duì)于2生成的test.jar ,解開后的目錄結(jié)構(gòu)如下:|- META-INF| '- MANIFEST'-test'-Test.class8 jar xvf test.jar運(yùn)行結(jié)果與7相同,對(duì)于解壓過(guò)程有詳細(xì)信息顯示,如:創(chuàng)建:META-INF/展開:META-INF/MANIFEST.MF創(chuàng)建:test/展開:test/Test.class9 jar uf test.jar man ifest.mf在test.jar中添加了文件 manifest.mf,此使用jar tf來(lái)查看test.jar可以發(fā)現(xiàn) test.jar中比原來(lái)多了一個(gè) manifest。這里順便提一下,如果使 用-m參數(shù)并指定 ma ni fest.mf文件,那么 ma ni fest.mf是作為清單文件MANIFEST來(lái)使用的,它的內(nèi)容會(huì)被添加到 MANIFEST中;但是,如果作為 一般文件添加到JAR文件包中,它跟一般文件無(wú)異。10 jar uvf test.jar m

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論