雙親委派模型

  從Java虛擬機的角度來說,只存在兩種不一樣的類加載器:一種是啓動類加載器(Bootstrap ClassLoader),這個類加載器使用c++語言實現,是虛擬機自身的一部分;另外一種就是全部其餘的類加載器,這些加載器都是由Java語言實現,獨立與虛擬機外部,而且所有都繼承自java.lang.ClassLoader。java

  從開發人員角度來看,類加載器還可劃分得更細緻一些,絕大部分Java程序都會使用到如下3種系統提供的類加載器。啓動類加載器,擴展類加載器,應用程序類加載器。咱們的應用程序都是由這3種類加載器互相配合進行加載的,若是沒有必要,還能夠加入本身定義的類加載器。c++

  

        類加載器雙親模型blog

  雙親委派模型要求除了頂層的啓動類加載器外,其他的類加載器都應當有本身的父類加載器。繼承

  雙親委派模型工做過程:若是一個類加載器收到了類加載的請求,它首先不會本身去嘗試加載這個類,而是把請求委派給父類加載器去完成,每個層次的類加載器都是如此,所以全部的加載請求最終都應該傳送到頂層的啓動類加載器中,只有當父類加載器反饋本身沒法完成這個加載請求時,子加載器纔會嘗試本身去加載。開發

  優勢:Java類隨着它的類加載器一塊兒具有了一種帶有優先級的層次關係;保證Java程序的穩定運做。虛擬機

  實現:先檢查是否已經被加載過,若沒有加載則調用父加載器的loadClass()方法,若父加載器爲空則默認使用啓動類加載器做爲父加載器。若是父類加載失敗,拋出ClassNotFoundException異常後,再調用本身的findClass()方法進行加載。io

參考文獻擴展

《深刻理解Java虛擬機》  機械工業出版社  周志明著請求

相關文章
相關標籤/搜索