JAVA反射

本文详细探讨了Java反射中的Class类用法,包括实例化Class对象的不同方法、获取构造器、创建对象、访问私有方法和属性,以及利用动态代理实现行为操控。通过实例演示了如何通过反射揭示类的结构并进行动态操作。
摘要由CSDN通过智能技术生成

在这里插入图片描述

反射主要的API

在这里插入图片描述

Class类

在Object类中定义了以下的方法,此方法将被所有子类继承:public final Class getClass()
以上的方法返回值的类型是一个Class类,此类是Java反戴的这和实际上所谓反射从程序的运行结果来看也很好理解,即:可以通过
对象反射求出类的名称

反射可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE都为其保留一个不变的Class类型的对象。个Class对象包含了特定某个类的有关信息。
class本身也是一个类
Class对象只能由系统建立对象
一个类在JVM中只会有一个Class实例
一个Class对象对应的是一个加载到JvM中的一个.class文件每个类的实例都会记得自己是由哪个Class实例所生成通过Class可以完整地得到一个类中的完整结构

在这里插入图片描述

实例化Class类对象四种方法

在这里插入图片描述

通过反射调用类的完整结构

实现的全部接口。继承的父类

		Class clazz1=Dian.class;
		Class clazz2=yzt.getClass();
		Class superClass=clazz2.getSuperclass();
		Class[] interfaces=clazz2.getInterfaces();

获取类的全部构造器

在这里插入图片描述

在这里插入图片描述

通过反射创造对象

调用无参公有构造方法

		Class clazz=Dian.class;
			Object ob=clazz.newInstance();
			Dian other=(Dian)ob;

指定某一个带有参数的公有构造方法

Class clazz=Dian.class;
			Constructor c=clazz.getConstructor(String.class);
			Dian other=(Dian)c.newInstance("我是那个参数");

调用private

通过反射获取类的方法

在这里插入图片描述
修饰符 1 代表public 2 代表private

			
			Class clazz=Dian.class;
				获取类的所有公有方法
			Method[] meth=clazz.getMethods();
		
			获取类的所有private public 的方法
			clazz.getDeclaredMethods()
			for (Method method : meth) {
				method.getName()//获取名字
			method.getTypeParameters()//返回数组 数组内是方法的所有参数类型
			method.getModifiers();//返回修饰符
			method.getReturnType();//返回值类型
			}
	

获取类的属性和包

在这里插入图片描述
和获取方法的类似

通过反射调用类中指定方法和属性

在这里插入图片描述
在这里插入图片描述

想要调用私有的 就是getDeclaredMethod前提是要解除私有封装setAccessible(true)

在这里插入图片描述
name就是对应属性名称

JAVA动态代理

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值