反射获取构造方法与成员方法与成员变量
注意:
获取class对象的方法
通过class对象调用构造方法getConstrutor的方法,返回Constructor对象接收
通过Constructor对象,调用newInstance(+//参数)实例化,使用向下转型接收带参或无参构造
Constructor方法,getName,getConstructor,getDeclaredConstructor可返回私有公有构造方法对象
getConstructors返回公有构造方法对象数组
获取成员方法
通过class对象调用getMethod方法,返回Method对象
通过Method对象调用Invoke(Object+//参数)调用带参或无参成员方法
Method方法,getName,getDeclaredMethod返回成员方法对象
getMethods返回成员对象数组
setAccessiable(true)对私有方法强制调用
- 使用反射的方式获取成员变量并使用
- class方法
- 通过class对象调用
- getDeclaredField()调用成员变量对象,getDecLaredFields()获取所有成员变量对象数组
- field方法
- set(Object)传值
- setAccessiable(ture)强制反射
/*通过反射获取LC类的成员方法
* */
public class PracticeReMethodDemo {
public static void main(String[] args) throws Exception {
/*首先返回class对象
* 调用构造方法constructor,返回构造方法
* 调用newInstance()实例化
* class对象调用method方法,放回成员方法对象
* 调用invoke()调用方法*/
/*class对象,三个方法*/
Class cls = PracticeAbstractLC.class;
Class cls1 = Class.forName("AutoTestMethod.Practice.Test1111.PracticeAbstractLC");
Constructor cons = cls.getConstructor();
PracticeAbstractLC plc = (PracticeAbstractLC) cons.newInstance();
/*调用method方法
* getMethod返回方法
* getDecalemethod返回私有方法
* getMethods返回公共方法数组*/
for(Object c:cls.getMethods()){
System.out.println(c);
}
//使用getmethod调用公有方法
Method method =cls1.getDeclaredMethod("senMsg");//返回方法对象
method.invoke(plc);
Method method1 = cls1.getDeclaredMethod("transLC");//无参的公有方法
method1.invoke(plc);
//强制反射
Method method2 = cls1.getDeclaredMethod("sum", int.class, int.class);//带参的私有方法
method2.setAccessible(true);
int a = (int) method2.invoke(plc,2,3);
System.out.println("两者的和是"+a);
}
}
package AutoTestMethod.Practice.Test1201;
import AutoTestMethod.Practice.Test1111.PracticeAbstractLC;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
/*
* 使用反射的方式获取成员变量并使用
* class方法
* 通过class对象调用
* getDeclaredField()调用成员变量对象,getDecLaredFields()获取所有成员变量对象数组
* field方法
* set(Object)传值
* setAccessiable(ture)强制反射*/
public class ReflectSetterDemo {
public static void main(String[] args) throws Exception{
//返回class对象
Class cls = Class.forName("AutoTestMethod.Practice.Test1111.PracticeAbstractLC");
Class stu = student1.class;
//调用Constructor,返回构造对象
Constructor cons = stu.getDeclaredConstructor();
//调用newInstance()返回对象
student1 plc = (student1) stu.getDeclaredConstructor().newInstance();
//调用Field,返回变量对象
//调用set方法,给变量对象赋值
stu.getDeclaredField("accno").set(plc,"6210000");
Field field = stu.getDeclaredField("accname");
field.setAccessible(true);
field.set(plc,"反射测试");
System.out.println(plc);
}
}
public class student1 {
String accno;
private String accname;
@Override
public String toString() {
return accname+accno;
}
}