現(xiàn)在的JAVA編程是內(nèi)容最多也是難度最大的程序,對(duì)于每一個(gè)程序員來說,對(duì)每個(gè)知識(shí)都要進(jìn)行深入的理解,這也是一個(gè)循序漸進(jìn)的一個(gè)過程,本文章主要對(duì)于classpath作一個(gè)深入的解析,希望對(duì)各位朋友們有所幫助。 jvm的類加載分三中方式: 系統(tǒng)級(jí)別:rt.jar 擴(kuò)展級(jí)別:java_home/jre/lib/ext/目錄下的jar文件 應(yīng)用級(jí)別:環(huán)境變量中的classpath或javac java中的參數(shù)指定java -classpath … 或者自己寫ClassLoader加載。 前面2中是JVM自動(dòng)處理。其中第二種是為了處理Java的classpath災(zāi)難而提供的解決方案。 實(shí)際上java虛擬機(jī)是由java luncher初始化的,也就是java(或java.exe) 這個(gè)程序來做的。 虛擬機(jī)按以下順序搜索并裝載所有需要的類: 1, 引導(dǎo)類: 組成java平臺(tái)的類, 包含rt.jar和i18n.jar中的類。 2, 擴(kuò)展類: 使用java擴(kuò)展機(jī)制的類,都是位于擴(kuò)展目錄($JAVA_HOME/jre/lib/ext) 中的。jar檔案包。 3, 用戶類: 開發(fā)者定義的類或者沒有使用 java 擴(kuò)展機(jī)制的第三方產(chǎn)品。 你必須在 命令行中使用 -classpath 選項(xiàng)或者使用 CLASSPATH 環(huán)境變量來確定這些類的位置。 我 們?cè)谏厦嫠f的用戶自己的類就是特指這些類。 這樣, 一般來說, 用戶只需指定用戶類的位置, 引導(dǎo)類和擴(kuò)展類是 "自動(dòng) "尋找的。 當(dāng)你的程序需要第三方的類庫支持, 而且比較常用, 就可以采用此種方法。比如常 用的數(shù)據(jù)庫驅(qū)動(dòng)程序, 寫 servlet 需要的 servlet 包等等。 設(shè)置方法就是在環(huán)境變量中 加入 CLASSPATH. 然后就可以直接編譯運(yùn)行了。而你的程序只用了些基礎(chǔ)類,尋找時(shí),就用不 著必須設(shè)定它。 在執(zhí)行Java程序的時(shí)候,會(huì)自動(dòng)加載程序用中需要的在rt.jar和其他java_home\jre\lib中包含的。jar文件中包含的Java基礎(chǔ)類庫和一些擴(kuò)展類庫。這些都是JVM自動(dòng)處理的,對(duì)用戶來說是透明的。 如果Java程序中使用到了一些應(yīng)用級(jí)別的類(如第三方的類),可以在javac和java中的-classpath選項(xiàng)中指定它們的搜索路徑,或者是自 己寫ClassLoader加載,另外也可以設(shè)置ClassPath環(huán)境變量,在里面指定那些蝶閥應(yīng)用級(jí)別的類的搜索路徑。 設(shè)置ClassPath環(huán)境變量不是必須的,只是為了方便使用,設(shè)置了ClassPath,JDK就會(huì)按ClassPath制定的路徑去搜索需要的應(yīng)用級(jí)別的類,而不必每一次都使用-classpath選項(xiàng)或自己寫ClassLoader。 還有需要注意的就是:如果相關(guān)的類就在當(dāng)前工作目錄下的話,上面3種方法都可以不要,因?yàn)镴DK系統(tǒng)會(huì)首先搜索會(huì)在當(dāng)前的工作目錄中搜索程序相關(guān)的類。 |
|