天天看點

ClassLoader加載|學習筆記ClassLoader加載

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

課程位址: https://developer.aliyun.com/learning/course/24

ClassLoader加載

内容介紹

1. ClassLoader簡介

2. 代碼範例

3. 雙親加載

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

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