java反射---類加載器

1.類加載器的工作機制

(1)裝載,將二進制類文件導入

(2)鏈接,對二進制文件執行校驗,準備和解析

(3)初始化,對類的靜態變量和靜態代碼塊進行初始化.

JVM在運行的時候會出現3個類加載器:根裝載器,ExtClassLoader(擴展類裝載器),AppClassLoader(應用類裝載器),其中根裝載器不是ClassLoader的子類,它是使用c++編寫,所以在java中看不到它,其中 跟裝載器負責JRE的核心類庫,如rt.jar,charsets.jar等, ExtClassLoader負責裝載JRE擴展目錄ext中的JAR類包,AppClassLoader負責加載ClassPath下的類包

通過如下代碼,可以看到各個類加載器,其中根加載器是在c++中編寫,所以在java中看不到,因此返回null

package com.smart.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class CarReflect {

	public static Car initByDefaultConst() throws Throwable {
		//通過類加載器,獲取car的類對象
		ClassLoader loader = Thread.currentThread().getContextClassLoader();
		Class<Car> carClass = (Class<Car>) loader.loadClass("com.smart.reflect.Car");
		//2.獲取類的構造器對象並通過實例化Car
		Constructor<Car> cons = carClass.getDeclaredConstructor((Class[])null);
		Car car = cons.newInstance();
		
		
		//3.通過反射設置屬性
		Method setBrand = carClass.getMethod("setBrand", String.class);
		setBrand.invoke(car, "brand");
		
		
		return car;
	}
	
	public static void main(String[] args) throws Throwable {
		/*Car car = CarReflect.initByDefaultConst();
		car.introduce();
		System.out.println(car.getBrand());*/
		//裝載,連接,初始化
		ClassLoader loader = Thread.currentThread().getContextClassLoader();
		System.out.println(loader);
		System.out.println(loader.getParent());
		System.out.println(loader.getParent().getParent());
	}
}
2.類加載器中的方法

(1) Constructor:類的構造函數反射類,通過"ClassLoader".getDeclaredContructor()獲取

(2)Method:類方法的反射類,通過"ClassLoader".getMethod獲取

(3)Field:類的成員變量的反射類,通過"ClassLoader".getField獲取

其它方法省略

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章