類加載器

java.lang.Class 代表了Java應用程序在運行時所加載的類或接口,當一個類被加載時,JVM就自動爲器生成一個Class對象。

可以通過對象的getClass()方法獲得Class實例,也可以通過類的靜態常量class獲得該Class對象。Class.getName()可以獲得該類的名字(帶命名空間)

可以通過Class.forName()加載類或ClassLoader的loadClass()加載類;

聲明一個類並不導致類被加載,只有類的對象生成時(非顯示加載:loadClass,Class.forName() )

forName()可以指定靜態塊代碼是否執行;

通過Class對象的接口,可以使用反射機制,探索對象的內部結構;

java程序 找到jre中的jvm(bin目錄中),啓動並初始化環境,陳昇Bootstrap(啓動帶,引導程序,C編寫) Loader->Extended Loader(parent是Bootstrap),Bootstrap->SystemLoader(SystemLoader的parent是Extended);

加載類時,有SystemLoader開始加載,不過每個類加載器都交給他的上層;

Bootstrap(JVM中沒有類代表他)加載JVM參數sun.boot.class.path目錄下的類(jre/Classes,jre/lib/某些.jar),

沒找到後,Extend加載jre/lib/ext/classes, /usr/java/packages/lib/ext,可以查看java.ext.dirs參數;可以通過-Djava.extdirs覆蓋該參數;

SystemLoader查看 cp下的(默認是當前工作目錄);cp使用*匹配多個jar,使用:分割目錄;

啓動後路徑不可變;如果要變,只能新增類加載器;新增的classLoader的父類是AppClassLoader(=SystemLoader)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章