1. 程式人生 > >類載入 全盤負責機制、雙親委派

類載入 全盤負責機制、雙親委派

今天看了Java 類載入深層剖析,看到兩個點:“全盤負責機制”、“雙親委派”。不太理解,查個資料,做個總結

“雙親委派”機制載入Class的具體過程是:

  1. 源ClassLoader先判斷該Class是否已載入,如果已載入,則返回Class物件;如果沒有則委託給父類載入器。
  2. 父類載入器判斷是否載入過該Class,如果已載入,則返回Class物件;如果沒有則委託給祖父類載入器。
  3. 依此類推,直到始祖類載入器(引用類載入器)。
  4. 始祖類載入器判斷是否載入過該Class,如果已載入,則返回Class物件;如果沒有則嘗試從其對應的類路徑下尋找class位元組碼檔案並載入。如果載入成功,則返回Class物件;如果載入失敗,則委託給始祖類載入器的子類載入器。
  5. 始祖類載入器的子類載入器嘗試從其對應的類路徑下尋找class位元組碼檔案並載入。如果載入成功,則返回Class物件;如果載入失敗,則委託給始祖類載入器的孫類載入器。
  6. 依此類推,直到源ClassLoader。
  7. 源ClassLoader嘗試從其對應的類路徑下尋找class位元組碼檔案並載入。如果載入成功,則返回Class物件;如果載入失敗,源ClassLoader不會再委託其子類載入器,而是丟擲異常。

 

“雙親委派”機制只是Java推薦的機制,並不是強制的機制。

我們可以繼承java.lang.ClassLoader類,實現自己的類載入器。如果想保持雙親委派模型,就應該重寫findClass(name)方法;如果想破壞雙親委派模型,可以重寫loadClass(name)方法。