開發者學堂課程【Java面試疑難點串講1:面試技巧及語言基礎:ClassLoader 加載】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址:
https://developer.aliyun.com/learning/course/24/detail/480ClassLoader 加載
内容介紹
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" ) ;
//3、目前的 Member 類是自己定義的類,是以類加載器: sun.misc.Launcher$AppClassLoadersystem.out.println(cls.getclassLoader());
//取得 Class 類的目前加載器
//2、sun.misc.Launcher$ExtClassLoader
system.out.println(cls.getclassLoader( ).getParent());
//1、Bootstrap 最根本的類加載器
system.out.println(cls.getclassLoader( ).getParent( ).getParent());
所有的 java 程式類加載器一共分為兩套類加載器:雙親加載:
• 系統中的類都會由一個系統内部的最高的類加載器負責加載,如果啟動的時候要加載的系統太多了,那麼一定會造成啟動變慢,是以JDK1.9才提出了一個子產品化的設計;
• 如果使用者自己定義的類,會使用其它的類加載器(ExtClassLoader、AppClassLoader,自己定義加載器),這樣可以避免系統安全問題。
在 java裡面有一個 java.lang.String,如果你現在定義了完全一樣的 java.lang.String 類,那麼最終所帶來的問題可能能造成安全隐患,是以 JDK.在設計的時候為了防止這種問題的出現,采用了雙親加載機制,以保證系統安全。
同時使用了自定義的類加載器還有一個好處:可以由使用者自己定義類檔案的來源,預設情況下的類加載器(99%)都是通過 CLASSPATH 加載的,但是如果使用了自定義的類加載器,可以通過遠端或檔案進行加載。