java 命令行參數(shù)與類加載機(jī)制

1 有用的命令行

java -cp 類搜索路徑 主類名

java -cp ".;a.jar" org.docshare.Haha

應(yīng)該是先搜索系統(tǒng)默認(rèn)路徑。
然后在先在當(dāng)前目錄下查找 org/docshare/Haha.class
如果找不到,會(huì)在a.jar中查找。再找不到,

java -jar a.jar
根據(jù)META-INF找到主類并執(zhí)行。

java -Djava.ext.dirs=你放jar的路徑

如果想加一個(gè)路徑,則可以加一個(gè)系統(tǒng)變量 java.ext.dirs指向你自己的lib目錄。
該系統(tǒng)太麻煩,也沒必要,所以加一個(gè)-D參數(shù)就可以添加一個(gè)只作用于當(dāng)前運(yùn)行的系統(tǒng)變量。
如 java -Dfoo="some string" A

class A{
  ..main..{
    System.out.println(System.getProperty("foo"));
  }
}

2 類加載機(jī)制

每當(dāng)JVM啟動(dòng),

JVM啟動(dòng)后生成三個(gè)ClassLoader BootstrapLoader, ExtClassLoader 和AppClassLoader。前面的類加載器是后面的父加載器。

默認(rèn)的類加載器為AppClassLoader, 加載類執(zhí)行一下流程:

1 查看自己是否已經(jīng)加載過此類,如果是,則直接返回加載過的。
2 如果沒有加載,則請求父加載器加載,父加載器如果無法,則自行加載。
3 父加載器如果沒有加載,就找他的父親進(jìn)行加載。

所以說,如果你自己定義一個(gè)java.util.Scanner類。使用默認(rèn)的類加載器來加載Scanner肯定會(huì)得到系統(tǒng)定義的Scanner類,而不是你自己定義的。
那么實(shí)在是想改變這種加載機(jī)制怎么辦? 使用自己的類加載器。

參考
[1] https://www.cnblogs.com/ahudyan-forever/p/6007458.html
[2] http://blog.csdn.net/briblue/article/details/54973413

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

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

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