類裝載器ClassLoader
一,作用
將一個java字節碼文件裝入JVM(java虛擬機)中,步驟如下:
(1)裝載,查找和導入Class文件
(2)鏈接,校驗、準備和解析步驟
①校驗:檢查載入Class文件的正確性
②準備:給類的靜態變量分配存儲空間
③解析:將符號引用轉換爲
(3)初始化,對類的靜態變量,靜態代碼塊執行初始化工作。
二,類裝載器的分類
(1)ClassLoader(根裝載器):負責裝載JRE核心類庫
(2)ExtClassLoader(拓展類裝載器):ClassLoader的子類,負責裝載JRE拓展目錄ext中的JAR包
(3)AppClassLoader(應用類裝載器):ExtClassLoader的子類,負責裝載classpath路徑下的類包
三,類實例、類描述對象和類裝載器的關係如圖:
每個類在JVM中都有一個對應的java.lang.Class對象,它提供了類的結構信息描述,數組、枚舉、註解及基本java類型(如int、double等)。Class是對象在裝載時,由JVM調用類裝載器的defineClass()方法自動構造的。
四,JAVA反射機制
通過從Class對象中獲取構造函數、成員變量、方法類等元素的反射對象,並以編程方式通過這些反射對象對目標類進行操作。常見的有以下主要反射類:
(1)Construcor:類的構造函數反射類,通過Class#getConstructs()方法獲取類的所有構造函數反射對象數組Construcor[]。
(2)Method:類方法反射類,通過Class#getDeclaredMethods()方法獲取類的所有方法反射類對象數組Method[]。
(3)Field:類的成員變量反射類,通過Class#getDeclaredFields()方法獲取類的所有成員變量反射類對象數組Method[]。等等反射類。。。。