開發者學堂課程【Java面試疑點串講1:ClassLoader加載】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址: https://developer.aliyun.com/learning/course/24
ClassLoader加載
内容介紹
1. ClassLoader簡介
2. 代碼範例
3. 雙親加載
ClassLoader是一個類加載器,但是需要注意的是在java 裡面類加載器并不是隻有一個,我們自己所編寫的類加載器往往都去繼承ClassLoader,是以自己的加載器是最後一次執行。

public c1ass classLoaderDemo {public static void main(String[] args) throws Exception {
class cls = class.forName( "cn.mldn.demo. Member" ) ;
1、目前的Member類是自己定義的類,是以類加載器: sun.misc.Launcher$AppClassLoadersystem.out.println(cls.getclassLoader());
取得Class類的目前加載器
2、sun.misc.Launcher$ExtClassLoader
system.out.println(cls.getclassLoader( ).getParent());
3、Bootstrap最根本的類加載器
system.out.println(cls.getclassLoader( ).getParent( ).getParent());
3.所有的java程式類加載器一共分為兩套類加載器:雙親加載:
• 系統中的類都會由一個系統内部的最高的類加載器負責加載,如果啟動的時候要加載的系統太多了,那麼一定會造成啟動變慢,是以JDK1.9才提出了一個子產品化的設計;
• 如果使用者自己定義的類,會使用其它的類加載器(ExtClassLoader、AppClassLoader,自己定義加載器),這樣可以避免系統安全問題。
在java裡面有一個java.lang.String,如果你現在定義了完全一樣的java.lang.String類,那麼最終所帶來的問題可能能造成安全隐患,是以JDK.在設計的時候為了防止這種問題的出現,采用了雙親加載機制,以保證系統安全。
同時使用了自定義的類加載器還有一個好處:可以由使用者自己定義類檔案的來源,預設情況下的類加載器(99%)都是通過CLASSPATH加載的,但是如果使用了自定義的類加載器,可以通過遠端或檔案進行加載。