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