天天看點

java雙親委派機制

JVM預定義了三種類型的類加載器。

》啟動(Bootstrap)類加載器

》标準擴充(Extension)類加載器

》系統(System)類加載器

-除了以上三種,還有一種特殊的類型----------線程上下文類加載器。

雙親委派機制描述:

    某個特定的類加載器在接到加載類的請求時,首先将加載任務委托給父類加載器,一次遞歸,如果父類加載器可以完成加載任務,就成功傳回;隻有在父類加載器無法完成此加載任務時,才自己去加載。

》》》委托機制的意義

        防止記憶體中出現多份同樣的位元組碼。

拓展:能不能自己寫個類叫java.lang.System?

    答:通常不可以,但可以采取另類方法達到這個需求。

    解釋:為了不讓我們寫System類,類加載采用委托機制,這樣可以保證爸爸們優先,爸爸們能找到的類,兒子就沒有機會加載。而System類是Bootstrap加載器加載的,就算自己重寫,也總是使用Java系統提供的System,自己寫的System類根本沒有機會得到加載。

但是,我們可以自己定義一個類加載器來達到這個目的,為了避免雙親委托機制,這個類加載器也 必須是特殊的。由于系統自帶的三個類加載器都加載特定目錄下的類,如果我們自己的類加載器放 在一個特殊的目錄,那麼系統的加載器就無法加載,也就是最終還是由我們自己的加載器加載。