ClassLoader是用來動態的加載class文件到虛擬機中,並轉換成java.lang.class類的一個實例,每一個這樣的實例用來表示一個java類,咱們能夠根據Class的實例獲得該類的信息,並經過實例的newInstance()方法建立出該類的一個對象,除此以外,ClassLoader還負責加載Java應用所需的資源,如圖像文件和配置文件等。java
ClassLoader類是一個抽象類。若是給定類的二進制名稱,那麼類加載器會試圖查找或生成構成類定義的數據。通常策略是將名稱轉換爲某個文件名,而後從文件系統讀取該名稱的「類文件」。ClassLoader類使用委託模型來搜索類和資源。每一個 ClassLoader實例都有一個相關的父類加載器。須要查找類或資源時,ClassLoader實例會在試圖親自查找類或資源以前,將搜索類或資源的任務委託給其父類加載器。 數據結構
注意:程序在啓動的時候,並不會一次性加載程序所要用的全部class文件,而是根據程序的須要,經過Java的類加載機制來動態加載某個class文件到內存中。函數
其體系結構圖以下 this
若是要實現本身的類加載器,無論是實現抽象列ClassLoader,仍是繼承URLClassLoader類,它的父加載器都是AppClassLoader,由於無論調用哪一個父類加載器,建立的對象都必須最終調用getSystemClassLoader()做爲父加載器,getSystemClassLoader()方法獲取到的正是AppClassLoader。spa
注意:Bootstrap classLoader並不屬於JVM的等級層次,它不遵照ClassLoader的加載規則,Bootstrap classLoader並無子類。.net
類的初始化是指:爲類中各個類成員(被static修飾的成員變量)賦初始值的過程,是類生命週期中的一個階段。3d
參考:code
https://blog.csdn.net/u014634338/article/details/81434327 對象