Java中反射的常用方法总结

在反射中,我们需要得到的是构造方法、成员方法、成员变量
得到这些的前提是得到.class文件的类对象

1.Class

1.Class类的静态成员方法,通过完整的包名.类名获取对应.class文件的Class对象

Class Class.forName(String packageNameAndClassName);

2.通过类名.class方法,获取对应的Class类对象,通常用于方法的参数类型

Class 类名.class;

3.通过类对象获取对应.class的Class类对象,方法参数,或者说数据类型判断

Class 类对象.getClass();
2.Constructor

1.获取当前Class类对象对应Java文件中,所有【public修饰构造方法的类对象数组】

public Constructor[] getConstructors();

2.获取当前Class类对象对应Java文件中,所有【构造方法的类对象数组】,包括私有化构造方法。

public Constructor[] getDeclaredConstructors();

3.根据指定的数据类型,来选择对应的构造方法,这里有且只能获取获取类内的指定数据类型public修饰构造方法类对象

public Constructor getConstructor(Class...initArgumentTypes);

4.根据指定的数据类型,来选择对应的构造方法,这里可能会抛出异常。这里可以获取指定参数类型私有化构造方法和非私有化构造方法

public ConstructorgetDeclaredConstructor(Class...initArgumentTypes);

5.通过Constructor对象来调用,传入当前构造方法所需创建对象的初始化参数,创建对象

Object newInstance(Object... initArguments);

6.给予通过暴力反射得到的非公开权限成员变量、成员方法、构造方法操作权限

setAccessible(boolean flag);
2.Method

1.获取类内所有public修饰的成员方法,包括从父类继承而来的public修饰方法

Method[] getMethods();

2.获取类内所有成员方法,但是不包括从父类继承而来的方法

Method[] getDeclaredMethods();

3.根据指定的方法名和对应的参数类型,获取对应的public修饰的成员方法,包括从父类继承得来的

Method getMethod(String methodName, Class...parameterTypes);

4.根据指定的方法名和对应的参数类型,获取对应的成员方法,包括私有化成员方法,但是不包括从父类继承而来的方法

Method getDeclaredMethod(String methodName, Class... parameterTypes);

5.通过Method类对象调用,执行对应的方法,需要的参数

Object invoke(Object obj, Object... arguments);
3.Field

1.获取类内所有public修饰的成员变量

Field[] getFields();

2.获取类内所有成员变量,包括私有化成员方法

Field[] getDeclaredFields();

3.获取指定变量名的成员变量对象,要求是public修饰的成员变量

Field getField(String fieldName);

4.获取指定变量名的成员变量对象,包括private私有化修饰的成员变量

Field getDeclaredField(String fieldName);

5.设置指定调用者中对应成员变量的数据

void set(Object obj, Object value);

6.获取指定调用者中指定成员变量的数据

Object get(Object obj);
总结

1.方法看似多,记起来很有规律,Constructor、Method、Field获取全部和获取指定共6个,暴力反射获取在这些方法基础上加上Declared,又是6个;
2.成员变量和成员方法在使用时需要提供使用者,因为每个对象都不一样;
3.暴力反射获取的如果要使用就调用setAccessible方法赋值true;
4.很多方法使用时都会抛出异常,都是找不到指定内容、参数类型不匹配等。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值