【java基礎】- java雙親委派機制


在了解雙親委派機制之前,你應當知道classloader(如果不了解,可以現在去惡補一下哈)

四種classloader

image.png

  1. 虛擬機自帶
  • 引導類加載器(Bootstrap ClassLoader)
  • 擴展類加載器(Extension ClassLoader)
  • 系統類加載器(Application ClassLoader)
  1. 用戶自定義
  • 用戶自定義類加載器,需要繼java.lang.ClassLoader
package java.lang;

public abstract class ClassLoader {
    ...
}

雙親委派機制

當類加載器加載某個類時,自己先不會加載,而是委托給父類加載器,如果父類加載向上還有父類加載器那么依次向上委托,直到最頂層加載器。如果該加載器能夠加載該類,那么就由該類加載加載,如果不能則由子類加載加載。如果所有類加載都不能加載則會拋出異常

雙親委派機制的優點

  1. 加載類帶有優先級關系,通過這種關系可以避免重復加載
  2. 避免源代碼被污染
    比如: 用戶自定了java.lang.String類
package java.lang;
class String {
    public static void main(String[] args) {
        System.out.println("........")
    }
}

用戶期望的是能夠加載自定義的java.lang.String,但實際上的結果:

錯誤: 在類 java.lang.String 中找不到 main 方法, 請將 main 方法定義為:
   public static void main(String[] args)
否則 JavaFX 應用程序類必須擴展javafx.application.Application

沒有找到main方法???那么證明jvm沒有加載自定義String,而是找到了java core中的java.lang.String.
這樣就防止了對java核心代碼的污染


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM