反射相关总结
一般只使用第三种方式
// 参数为你的完整包路径
Class clazz = Class.forName("com.earthchen.constructors.Student");clazz.getConstructors() : 所有”公有的”构造方法
Constructor[] conArray = clazz.getConstructors();clazz.getDeclaredConstructors() :获取所有的构造方法(包括私有、受保护、默认、公有)
Constructor[] conArray = clazz.getDeclaredConstructors();clazz.getConstructor(Class… parameterTypes); 获取单个的”公有的”构造方法
//1>、因为是无参的构造方法所以类型是一个null,不写也可以:这里需要的是一个参数的类型,切记是类型
//2>、返回的是描述这个无参构造函数的类对象。
Constructor con = clazz.getConstructor(null);clazz.getDeclaredConstructor():获取”某个构造方法”可以是私有的,或受保护、默认、公有
Constructor con = clazz.getDeclaredConstructor(char.class);con.newInstance(): 调用构造方法
如果在构造实体时,需要传参数,直接在newInstance()方法中添加相关参数即可
obj=con.newInstance('男')在访问私有方法时,需要设置允许访问
con.setAccessible(true);clazz.getFields() : 所有”公有的”字段
Field[] fieldArray = stuClass.getFields();clazz.getDeclaredFields() :获取所有的构造方法(包括私有、受保护、默认、公有)
Field[] fieldArray = stuClass.getDeclaredFields();clazz.getField(String name): 获取某个”公有的”字段
Field f = stuClass.getField("name");clazz.getDeclaredField(String name):获取某个字段(可以是私有的)
Field f = stuClass.getDeclaredField("phoneNum");obj:要设置的字段所在的对象value:要为字段设置的值
f.set(obj, "18888889999");f.set(Object obj,Object value): 设置字段的值在设置字段的时候,首先需要构造出obj的对象,也就是需要调用构造方法实例化在访问私有属性时,需要设置允许访问
f.setAccessible(true);clazz.getMethods() : 所有”公有的”方法(包含了父类的方法也包含Object类)
Method[] methodArray = stuClass.getMethods();clazz.getDeclaredMethods() :获取所有的成员方法,包括私有的(不包括继承的)
Method[] methodArray = stuClass.getDeclaredMethods();clazz.getMethod(String name,Class<?>… parameterTypes): 获取某个”公有的”方法
Method m = stuClass.getMethod("show1", String.class);clazz.getDeclaredMethod(String name,Class<?>… parameterTypes):获取某个方法(可以是私有的)
Method m = stuClass.getDeclaredMethod("show4", int.class);Method –> public Object invoke(Object obj,Object… args): 调用方法obj : 要调用方法的对象;args:调用方式时所传递的实参;
m.invoke(obj, 20);在设置字段的时候,首先需要构造出obj的对象,也就是需要调用构造方法实例化在访问私有方法时,需要设置允许访问
m.setAccessible(true);参考:https://blog.csdn.net/sinat_38259539/article/details/71799078