Java關於類載入器的簡單學習
阿新 • • 發佈:2019-01-05
首先,類載入器本身也是一個類,類名就叫ClassLoader.
類載入器一共有三個子類,都屬於負責載入類的物件。
1. AppClassLoader : 應用類載入器,作用是載入使用者自定義類
2.ExtClassLoader : 擴充套件類載入器,作用是載入類庫中的一些展類
3.BootStrapLoader : 引導類載入器,作用是載入 jdk提供的類.
下面還是要看一下程式碼:
package cn.itcast_類載入器; public class Demo { public static void main(String[] args) { String s = "abc"; ClassLoader c1 = Demo.class.getClassLoader(); System.out.println(c1);//AppClassLoader System.out.println(c1.getParent());//ExtClassLoader System.out.println(c1.getParent().getParent());//BootStrapLoaderLoader System.out.println(String.class.getClassLoader());//BootStrapLoader } }
上面程式碼的執行結果為:
此圖包含了程式碼中四條輸出語句的結果,第一、二行分別是AppClassLoader和ExtClassLoader的名字(雖然看起來像地址,但它們確實是名字),第三行和第四行輸出為null,也就是說BootStrapLoader是無法獲取的,因為BootStrapLoader這個類不是用Java語言編寫的,而是用C/C++編寫來的,所以BootStrapLoader的值為null,並不代表沒有這個值,而是無法獲取到這個值。因為String型別的類載入器是在JDK中的,所以獲取的類載入器也為BootStrapLoader.
熟悉類載入器之前要了解一下反射機制,大家可以參考一下我之前寫的《對Java中反射機制的理解》。