Java虛擬機(jī)規(guī)范并沒有規(guī)定虛擬機(jī)應(yīng)該從哪里尋找類框都,因此不同的虛擬機(jī)實(shí)現(xiàn)可以采用不同的方法惨好。對(duì)于從哪里加載class文件魁莉,給了足夠多的自由,可以從文件系統(tǒng)讀取和從JAR(或ZIP)壓縮包中提取class文件表鳍。除此之外哨鸭,也可以通過網(wǎng)絡(luò)下載、從數(shù)據(jù)庫加載粥谬,甚至是在運(yùn)行中直接生成class文件,構(gòu)成class文件的基本數(shù)據(jù)單位是字節(jié)
Oracle的Java虛擬機(jī)實(shí)現(xiàn)根據(jù)類路徑(class path)來搜索類肛根。按照搜索的先后順序辫塌,類路徑可以分為以下3個(gè)部分:
- 啟動(dòng)類路徑(bootstrap classpath)
默認(rèn)對(duì)應(yīng)jre\lib
目錄漏策,Java標(biāo)準(zhǔn)庫(大部分在rt.jar里)位于該路徑【拾保可以通過-Xbootclasspath
選項(xiàng)修改啟動(dòng)類路徑掺喻,不過通常并不需要這樣做
會(huì)按jre\lib\*
找下面所有jar包
- 擴(kuò)展類路徑(extension classpath)
默認(rèn)對(duì)應(yīng)jre\lib\ext
目錄,使用Java擴(kuò)展機(jī)制的類位于這個(gè)路徑储矩。
會(huì)按jre\lib\ext*
找下面所有jar包
-Xjre
指定jre目錄,如果沒指定,就當(dāng)前目錄的jre文件夾,再?zèng)]有就環(huán)境變量JAVA_HOME
下的jre目錄
-Xjre "D:\Java\jdk1.7.0_15\jre" java.io.File
測(cè)試
- 用戶類路徑(user classpath)
默認(rèn)值是當(dāng)前目錄感耙,也就是“.”我們自己實(shí)現(xiàn)的類,以及第三方類庫持隧〖磁穑可以設(shè)置CLASSPATH環(huán)境變量
來修改用戶類路徑,但是這樣做不夠靈活屡拨,所以不推薦使用只酥。更好的辦法是給java命令傳遞-classpath(或簡(jiǎn)寫為-cp)選項(xiàng)褥实。-classpath/-cp
選項(xiàng)的優(yōu)先級(jí)更高,可以覆蓋CLASSPATH環(huán)境變量設(shè)置裂允。
-classpath/-cp
選項(xiàng)既可以指定目錄损离,也可以指定JAR文件或者ZIP文件
java -cp path\to\classes ... //指定目錄的 直接把類全名.換/ 找下面的.class文件
java -cp path\to\lib1.jar ...//遍歷下面每個(gè)class
java -cp path\to\lib2.zip ...//遍歷下面每個(gè)class
java -cp classes\lib\* ... //*通配符 匹配目錄下全部jar包
還可以同時(shí)指定多個(gè),用分隔符;分開即可绝编。