【java基础】-- 反射机制


一、理解概念:

java反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法;
对于任意一个对象都能够调用它的任意一个方法和属性,

动态获取类中的信息,就是java反射
可以理解为对类的解剖;

提高了应用程序的扩展性。

二、应用场景:

扩展应用程序,实现接口,配置文件内加入新的实现类的名称,
即可通过指定名称来根据找到新的实现类,并加载其内容,然后调用。
(动态的获取类中的信息,以及调用类中的信息)

1. eg:

tomcat–提供处理请求和应答的方式:
因为具体的处理动作不同,所以对外提供接口,有开发者来实现具体的请求和应答处理。
对外提供了Servelt接口(处理请求和应答),

image.png

2.配置文件:

把不确定的参数信息写进来
tomcat servlet.xml把端口配置进来
类的信息不确定,就把类名配置进来,即反射机制。

三、用于描述字节码文件的类:

1. 表现形式:

描述多个对象的共性可以用类表示,描述多个类的共性,用字节码类Class来表示。
class Class{
// 提供获取字节码文件中的内容
// 比如:名称,字段,构造函数,一般函数
// 该类可以获取字节码的所有内容
// 反射就是该类完成的
}
总结:
想要对一个类文件进行解剖,只要获取到该类的字节码文件即可。

2. 如何拿到该类对应的字节码文件对象呢?

① Object类中国的getclass()方法
特点:这种方式必须明确具体的类,并创建对象(…很麻烦)
Person p=new Person();

Class<?> clzazz= p.getClass();
② 任意一个数据类型都具备一个静态的属性,.class类获取对应的class对象 (----相对简单,但是还是要明确用到类中的静态成员,扩展性不强)
Class clazz = Person.class;
③ 只要通过给定的字节码文件名称就可以获取到对应的字节码文件(—只要有名称即可,扩展性最强)
Class clazz= Class.forName(“className”);
注意是完整的带包名的类
然后创建类的实例:
Object obj= clazz.newInstance();

一般被反射的类 通常都带空参数
如果不是空参数:
先获取到该构造函数,通过该有参的构造函数创建实例
clazz.getConstructors(明确参数类型);

根据方法名和参数获取到方法:
Method method=clazz.getMethod(“show”,null);//获取空参数的一般方法

拿到方法之后如何运行?
运行一个方法需要调用方法的实例对象和方法参数,
既需要所属对象,又需要实例参数时候,调用invoke方法;
method.invoke(obj,null); // 参数是实例和方法参数


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值