資源描述:
《java類路徑說(shuō)明(新手必讀)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、一、類路徑?(classpath)當(dāng)你滿懷著希望安裝好java,然后興沖沖地寫(xiě)了個(gè)“helloworld”,然后編譯,運(yùn)行,就等著那兩個(gè)美好的單詞出現(xiàn)在眼前。可是不幸的是,只看到了“Can'tfindclassHelloWorld”或者“Exceptioninthread"main"java.lang.NoSuchMethodError:main。為什么呢?編譯好的class明明在呀。我們一起來(lái)看一看java程序的運(yùn)行過(guò)程。我們已經(jīng)知道java是通過(guò)java虛擬機(jī)來(lái)解釋運(yùn)行的,也就是通過(guò)java命令—javac編譯生成的.class文件
2、就是虛擬機(jī)要執(zhí)行的代碼,稱之為字節(jié)碼(bytecode),虛擬機(jī)通過(guò)classloader來(lái)裝載這些字節(jié)碼,也就是通常意義上的類。這里就有一個(gè)問(wèn)題,classloader從哪里知道java本身的類庫(kù)及用戶自己的類在什么地方呢?或者有著缺省值(當(dāng)前路徑),或者要有一個(gè)用戶指定的變量來(lái)表明,這個(gè)變量就是類路徑(classpath),或者在運(yùn)行的時(shí)候傳參數(shù)給虛擬機(jī)。這也就是指明classpath的三個(gè)方法。編譯的過(guò)程和運(yùn)行的過(guò)程大同小異,只是一個(gè)是找出來(lái)編譯,另一個(gè)是找出來(lái)裝載。實(shí)際上java虛擬機(jī)是由javaluncher初始化的,也就是j
3、ava(或java.exe)這個(gè)程序來(lái)做的。虛擬機(jī)按以下順序搜索并裝載所有需要的類:1、引導(dǎo)類:組成java平臺(tái)的類,包含rt.jar和i18n.jar中的類。2、擴(kuò)展類:使用java擴(kuò)展機(jī)制的類,都是位于擴(kuò)展目錄($JAVA_HOME/jre/lib/ext)中的.jar檔案包。3、用戶類:開(kāi)發(fā)者定義的類或者沒(méi)有使用java擴(kuò)展機(jī)制的第三方產(chǎn)品。你必須在命令行中使用-classpath選項(xiàng)或者使用CLASSPATH環(huán)境變量來(lái)確定這些類的位置。我們?cè)谏厦嫠f(shuō)的用戶自己的類就是特指這些類。這樣,一般來(lái)說(shuō),用戶只需指定用戶類的位置,引導(dǎo)類和
4、擴(kuò)展類是“自動(dòng)”尋找的。那么到底該怎么做呢?用戶類路徑就是一些包含類文件的目錄,.jar,.zip文件的列表,至于類具體怎么找,因?yàn)闋砍兜絧ackage的問(wèn)題,下面將會(huì)說(shuō)到,暫時(shí)可認(rèn)為只要包含了這個(gè)類就算找到了這個(gè)類。根據(jù)平臺(tái)的不同分隔符略有不同,類unix的系統(tǒng)基本上都是“:”,windows多是“;”。其可能的來(lái)源是:*?“.”,即當(dāng)前目錄,這個(gè)是缺省值。*?CLASSPATH環(huán)境變量,一旦設(shè)置,將缺省值覆蓋。*?命令行參數(shù)-cp或者-classpath,一旦指定,將上兩者覆蓋。*?由-jar參數(shù)指定的.jar檔案包,就把所有其他的
5、值覆蓋,所有的類都來(lái)自這個(gè)指定的檔案包中。由于生成可執(zhí)行的.jar文件,還需要其他一些知識(shí),比如package,還有特定的配置文件,本文的最后會(huì)提到??上瓤纯磈dk自帶的一些例子。我們舉個(gè)HelloWorld的例子來(lái)說(shuō)明。先做以下假設(shè):*?當(dāng)前目錄是/HelloWorld(或c:HelloWorld,以后都使用前一個(gè))*?jdk版本為1.2.2(linux下的)*?PATH環(huán)境變量設(shè)置正確。(這樣可以在任何目錄下都可以使用工具)*?文件是HelloWorld.java,內(nèi)容是:??public?class?HelloWorld??{p
6、ublic?static?void?main(String[]?args){System.out.println("Hello?World!");System.exit(0);}}首先這個(gè)文件一定要寫(xiě)對(duì),如果對(duì)c熟悉的話,很有可能寫(xiě)成這樣:public?static?void?main(int?argc,String[]?argv){....}這樣是不對(duì)的,不信可以試一試。由于手頭沒(méi)有java的規(guī)范,所以作如下猜想:java的application程序,必須以public?static?void?main(String[])開(kāi)始,其
7、他不一樣的都不行。到現(xiàn)在為止,我們?cè)O(shè)置方面只設(shè)置了PATH。1、當(dāng)前路徑就是指你的.class文件在當(dāng)前目錄下,[HelloWorld]$?javac?HelloWorld.java??//這一步不會(huì)有多大問(wèn)題,[HelloWorld]$?java?HelloWorld??????//?這一步可能就會(huì)有問(wèn)題.。如果出了象開(kāi)頭那樣的問(wèn)題,首先確定不是由于敲錯(cuò)命令而出錯(cuò)。如果沒(méi)有敲錯(cuò)命令,那么接著做:[HelloWorld]$?echo?$CLASSPATH或者c:HelloWorld>echo?%CLASSPATH%看看CLASSPAT
8、H環(huán)境變量是否設(shè)置了,如果設(shè)置了,那么用以下命令:[HelloWorld]$?CLASSPATH=或者c:HelloWorld>?set?CLASSPATH=來(lái)使它為空,然后重新運(yùn)行。這次用戶類路徑缺省的