啟動類載入器和擴充套件類載入器沒有父類載入器,而系統類載入器的父類載入器是擴充套件類載入器,自定義類載入器父類載入器則是擴充套件類載入器
所謂的類載入:就是建立.class檔案對應的class物件,並將class檔案載入到記憶體的過程。
1、載入:查詢類的.class檔案,並建立class物件
3、初始化:若有父類,初始化父類,執行靜態初始化器、靜態變數(準備階段只是賦予了預設值)、以及成原變數初始化。
loadclass 方法用於載入class檔案,這裡類載入機制設涉及到雙親委派機制。
雙親委派機制:即子類載入器收到類載入請求時,會提交給父類載入器處理,如果父類載入器上面還有父類載入器,則繼續遞迴,找到最終的父類載入器載入,當父類載入器載入類失敗時,才會由子類載入器中的 findclass() 方法去載入。
1、這種帶有優先順序的層次關係,可以避免類被重複載入,當父類載入器載入過,子類就不用載入;
2、保證類載入的安全性:比如核心的api庫被篡改,父類載入器載入,會直接報錯。
protected class> loadclass(string name, boolean resolve) throws classnotfoundexception else } catch (classnotfoundexception e) if (c == null) } if (resolve) return c; } }
類載入器及雙親委派機制
目錄類載入過程 3.初始化 類載入子系統中的initialization 類載入時機 類載入機制 引用資料 將類的class檔案讀入記憶體,並為建立乙個j a.lang.class物件。也就是說,當程式使用任何類時,系統都會為它新建乙個j a.lang.class物件。類的載入由類載入器完成,類載入...
一 類載入的雙親委託機制詳解
在父親委託機制中,各個載入器按照父子關係形成了樹形結構,除了根類載入器之外,其餘類載入器都有且只有乙個父載入器 通俗理解 某乙個類載入器載入乙個特定的類,他並不是立即由自己載入了,而是將這個動作委託給父親來完成,如果父親還有父親,就繼續將這個動作向上傳遞,一直到沒有父親的 根類載入器 也就是啟動類載...
談談類載入器的雙親委派機制
如果我們要載入乙個類,我們會先依據上圖的順序,一層一層去找是否已經有類載入器已經載入類資訊,最後才是我們的自己寫的類載入器,最大程度上防止資源的浪費 我們現在去看看classloader的原始碼 重點看看這段,簡單明瞭,他會先去看看classloader的parent extclassloader ...