Java classpath

一、類加載器與classpath

以下為系統(tǒng)中的三種類加載器,每個類加載器都有自己用來尋找類文件的路徑。其中系統(tǒng)類加載器負(fù)責(zé)加載classpath(用戶類路徑)上指定的類庫,classpath是包含有class文件的目錄、jar包或者是war包

  1. 啟動類加載器(Bootstrap ClassLoader) 此類加載器負(fù)責(zé)將存放在 <JAVA_HOME>\lib 目錄中的,或者被-Xbootclasspath參數(shù)所指定的路徑中的,并且是 虛擬機(jī)識別 的(僅按照文件名識別,如rt.jar,名字不符合的類庫即使放在lib目錄中也不會被加載)類庫加載到虛擬機(jī)內(nèi)存中。啟動類加載器無法被Java程序直接引用,用戶在編寫自定義類加載器時,如果需要把加載請求委派給引導(dǎo)類加載器,直接使用null代替即可。
  2. 擴(kuò)展類加載器(Extension ClassLoader) 這個類加載器是由ExtClassLoader(sun.misc.Launcher$ExtClassLoader)實(shí)現(xiàn)的。它負(fù)責(zé)將<Java_Home>/lib/ext或者被java.ext.dir系統(tǒng)變量所指定路徑中的所有類庫加載到內(nèi)存中,開發(fā)者可以直接使用擴(kuò)展類加載器。
  3. 應(yīng)用程序類加載器(Application ClassLoader) 這個類加載器是由AppClassLoader(sun.misc.Launcher$AppClassLoader)實(shí)現(xiàn)的。由于這個類加載器是ClassLoader中的getSystemClassLoader()方法的返回值,因此一般稱為 系統(tǒng)類加載器。它負(fù)責(zé)加載用戶類路徑(ClassPath)上所指定的類庫,開發(fā)者可以直接使用這個類加載器,如果應(yīng)用程序中沒有自定義過自己的類加載器,一般情況下這個就是程序中 默認(rèn)的類加載器

二、classpath的獲取規(guī)則

  1. 當(dāng)前路徑"."。
  2. 系統(tǒng)變量CLASSPATH。
  3. 命令行設(shè)置的-cp或者-classpath
  4. 使用-jar命令設(shè)置的jar包。
    其中,四種方式優(yōu)先級逐步提升,也就是

當(dāng)前路徑 < 系統(tǒng)變量CLASSPATH < -cp命令行設(shè)置的路徑 < -jar設(shè)置的路徑

三、如何設(shè)置classpath

  1. 設(shè)置系統(tǒng)變量

setenv CLASSPATH path1:path2

  1. 命令行使用-cp設(shè)置

-cp path1:path2...

  1. -jar命令

-jar xxx.jar

linux下都使用“:”分隔

四、參考資料

深入理解Java虛擬機(jī)

Setting the class path

How Classes are Found

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容