天天看點

ClassLoader 加載| 學習筆記

開發者學堂課程【Java面試疑難點串講1:面試技巧及語言基礎:ClassLoader 加載】學習筆記,與課程緊密聯系,讓使用者快速學習知識。

課程位址:

https://developer.aliyun.com/learning/course/24/detail/480

ClassLoader 加載

内容介紹

1. ClassLoader 簡介

2. 代碼範例

3. 雙親加載

ClassLoader 是一個類加載器,但是需要注意的是在java 裡面類加載器并不是隻有一個,我們自己所編寫的類加載器往往都去繼承ClassLoader,是以自己的加載器是最後一次執行。

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 加載的,但是如果使用了自定義的類加載器,可以通過遠端或檔案進行加載。