Java基礎加強——類載入機制

來源:互聯網
上載者:User

標籤:操作   描述   啟動   允許   sys   pat   trap   試題   nbsp   

  什麼叫類載入

    JVM把 .class 位元組碼檔案載入到記憶體,並進行相關的校正、解析、初始化,最終轉換為虛擬機器可用的JAVA類型的過程,稱為JVM類載入機制。

  (當然,JVM並不關心class檔案的來源,什嗎?什麼叫class檔案?——每一個Java class檔案都對一個Java類或者Java介面做出了全面描述)

  類載入器的分類 

  啟動(Bootstrap)類載入器:引導類裝入器是用本地代碼實現的類裝入器,它負責將 <Java_Runtime_Home>/lib下面的核心類庫或-Xbootclasspath選項指定的jar包載入到記憶體中。由於引導類載入器涉及到虛擬機器本地實現細節,開發人員無法直接擷取到啟動類載入器的引用,所以不允許直接通過引用進行操作。(也叫根載入器)

 

  擴充(Extension)類載入器:擴充類載入器是由Sun的ExtClassLoader(sun.misc.Launcher$ExtClassLoader)實現的。它負責將< Java_Runtime_Home >/lib/ext或者由系統變數-Djava.ext.dir指定位置中的類庫載入到記憶體中。開發人員可以直接使用標準擴充類載入器。

 

  系統(System)類載入器:系統類別載入器是由 Sun的 AppClassLoader(sun.misc.Launcher$AppClassLoader)實現的。它負責將系統類別路徑java -classpath或-Djava.class.path變數所指的目錄下的類庫載入到記憶體中。開發人員可以直接使用系統類別載入器。

  這三個類載入器還分階級
    3的領導是2 2的領導是1 1就是BOSS

  雙親委派模型

  雙親委派模型的工作過程為:如果一個類載入器收到了類載入的請求,它首先不會自己去嘗試載入這個類,而是把這個請求委派給父類載入器去完成,每一個層次的載入器都是如此,因此所有的類載入請求都會傳給頂層的啟動類載入器,只有當父載入器反饋自己無法完成該載入請求(該載入器的搜尋範圍中沒有找到對應的類)時,子載入器才會嘗試自己去載入

  引自百度:

 

一道面試題

 

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

 

答案:通常不可以,但可以採取另類方法達到這個需求。 
解釋:為了不讓我們寫System類,類載入採用委託機制,這樣可以保證爸爸們優先,爸爸們能找到的類,兒子就沒有機會載入。而System類是Bootstrap載入器載入的,就算自己重寫,也總是使用Java系統提供的System,自己寫的System類根本沒有機會得到載入。

 

Java基礎加強——類載入機制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.