Java之反射

一、反射概念

a、反射是指对于任何一个Class类,在运行的时候都可以直接得到这个类的全部成分;

b、在运行时,可以直接得到这个类的构造器对象:Constructor

c、在运行时,可以直接得到这个类的成员变量对象:Field

d、在运行时,可以直接得到这个类的成员方法对象:Method

e、这种运行是动态获取类信息以及动态调用类中成分的能力称为Java原因的反射机制。

反射基本作用:

      反射是在运行时获取类的字节码文件对象:然后可以解析类中的全部成分。

反射的关键:

      反射的第一步都是先得到编译后的Class类对象,然后就可以得到Class的全部成分。

二、反射获取类对象、构造器对象、成员变量对象、方法对象

1.反射获取类对象

a、反射的第一步是什么?

     获取Class类对象,才可以解析类的全部成分。

b、获取Class类的对象的三种方式

     方式一:class c1 = class.forName("全类名") ;

     方式二:class c2 = 类名.class;

     方式三:class c3 = 对象.getclass();

2.反射获取构造器对象

使用反射技术获取构造器对象并使用:

第一步:获取class对象    第二步:获取Constructor对象    第三步:创建对象

class类中用于获取构造器的方法

方法说明
Constructor<?> getConstructors()返回所有构造器对象的数组(只能拿public的)
Constructor<?> getDeclaredConstructors()返回所有构造器对象的数组,存在就能拿到
Constructor<T> getConstructors(class<?>... parameterTypes)返回单个构造器对象(只能拿public的)
Constructor<T> getDeclaredConstructors(class<?>... parameterTypes)返回单个构造器对象,存在就能拿到

获取构造器的作用依然是初始化一个对象返回

Constructor类中用于创建对象的方法

符号说明
T newlnstance(Object... initargs)根据指定的构造器创建对象
public void setAccessible(boolean flag)设置为ture,表示取消访问检查,进行暴力反射

反射得到的构造器可以做什么?

依然是创建对象的     public newlnstance(Object... initargs)

若是非public的构造器,需要打开权限(暴力反射),然后在创建对象

  setAccessible(boolean)

  反射可以破坏封装性,私有的也可以执行了

3.反射获取成员变量对象

使用反射技术获取成员变量对象并使用:

第一步:获取class对象    第二步:获取Field对象    第三步:赋值或者获取

Class类中用于获取成员变量的方法

方法说明
Field[ ]  getFields()返回所有成员变量对象的数组(只能拿public的)
Field[ ]   getDeclaredFields()返回所有成员变量对象的数组,存在 就能拿到
Field  getField(String name)返回单个成员变量对象(只能拿public的)
Field   getDeclaredField(String name)返回单个成员变量对象,存在就能拿到

获取成员变量的作用实在某个对象中取值、赋值

Field类中用于取值、赋值的方法

符号说明
void set(Object obj,Object value):赋值
Object get(Object obj)获取值

反射得到成员变量可以做什么?

依然在某个对象中取值盒赋值

   void set(Object obj,Object value):

  Object get(Object obj)

若某个成员变量是非public的,需要打开权限(暴力反射),然后取值,赋值。

   setAccessible(boolean)

4.反射获取方法对象

使用反射技术获取方法对象并使用:

第一步:获取class对象    第二步:获取Method对象    第三步:运行方法

Class类中用于获取成员方法的方法

方法说明
Method [ ]   getMethods( )返回所有成员方法对象的数组(只能拿public的)
Method [ ]  getDeclareMethods( )返回所有成员方法对象的数组,存在 就能拿到
Method  getMethod(String name,class<?>... parameterTypes)返回单个成员方法对象(只能拿public的)
Method  getDeclareMethod(String name,class<?>... parameterTypes)返回单个成员方法对象,存在就能拿到

获取成员方法的作用是在某个对象中进行执行此方法

Method类中用于触发执行的方法

符号说明
object invoke (object obj,object...args)

运行方法

参数一:用obj对象调用该方法

参数二:调用方法的传递的参数(如果没有就不写)

返回值:方法返回值(如果没有就不写)

反射得到成员方法可以做什么?

依然是在某个对象中触发该方法执行    object invoke (object obj,object...args)

如果某成员方法是非public的,需要打开权限(暴力反射),然后再触发执行。

setAccessible(boolean)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值