前面提到過的類載入階段,這個階段一個重要的角色就是ClassLoader(類載入器),它的主要作用就是從外界獲取二進制數據流。所有的Class都是由類載入器進行載入的,因此只能影響類的載入階段,而不能影響到其他階段。
在標準的Java程式中,Java虛擬機器會建立三類ClassLoader爲整個應用程式服務
當然使用者還可以自定義類載入器,以拓展Java虛擬機器獲取Class數據的能力。
啓動類載入器最爲特殊,它是基於C語言實現的,並且在Java中沒有物件與之對應。系統的核心類就是由啓動類載入器進行載入的,是Java虛擬機器的核心元件。
系統中的ClassLoader在協同工作時,預設會使用雙親委派模式。即在類載入的時候,系統會判斷當前類是否已經被載入,如果已經被載入,就直接返回可用的類,否則就會嘗試載入,嘗試載入時,會先請求雙親處理,如果雙親請求失敗,則自己載入。
注意:雙親爲null有兩種情況,一,雙親 就是啓動類載入器;二,當前載入器就是啓動類載入器。
弊端:
檢查類是否已經被裝載是單向的,載入類也是單向的。但是,假如要使用一個Java核心類的介面和工廠,這是啓動類載入器級別的,拓展類載入器和以下的載入器是存取不到的,這就存在限制。