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获取

其它方法省略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值