雙親委派模型

雙親委派模型

類加載器

  1. BootstrapClassLoader (啓動類加載器) 主要加載項目中在lib下的類;
  2. ExtensionClassLoader (標準類加載器) 主要價值lib/ext下的類或者有系統變量java.ext.dir指定位置中類庫中的類,開發者可以直接使用;
  3. ApplicationClassLoader (應用程序類加載器) 主要加載我們程序中的類和環境變量CLASSPATH指定類庫中的類,開發者可以直接使用,ClassLoader.getSystemClassLoader()可以獲取到;
  4. 初次之外還有自定義的類加載器;

類加載器的特點

  1. 除頂級類加載器外所有的類加載器都有父級類加載器
  2. 在加載某個類的時候首先不是直接加載,而是將加載任務交給父類加載器進行加載,如果父類加載器加載失敗自己纔會嘗試加載
  3. 根據特點1,類加載器會形成一個父子關係,這種父子關係被稱爲雙親委派模型,這種父子關係不是依靠繼承(Inheritance)實現的,而是通過邏輯關係實現的;
  4. 根據特點3,雙親委派模型並不是強制的,而是 Java 設計者推薦給開發者的類加載器的實現方式

爲什麼會有雙親委派模型

在JVM中任意一個類都需要由它的類加載器和這個類本身共同確立其在java虛擬機中的<font color='red'>唯一性</font>
簡單來說判斷兩個類是否相同首先判斷的就是這兩個類是否是由同一個類加載器所加載的,即使是同一個class文件,但加載類的類加載器不同,這裏的“相等”,包括代表類的 Class 對象的 equals() 方法、isAssignableFrom() 方法、isInstance() 方法的返回結果,也包括使用 instanceof 關鍵字做對象所屬關係判定等情況。
所有我們如果要比較兩個類是否相同類加載器是一個前置判斷項,而這種雙親委派模型就完美的解決了這個問題.

雙親委派模型示(邏輯)繼承意圖

啓動類加載器
擴展類加載器
應用程序類加載器
用戶自定義類加載器
用戶自定義類加載器
發佈了9 篇原創文章 · 獲贊 2 · 訪問量 3738
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章