反射机制调用指定方法

public class Test1 {
public static void main(String[] args) {
try {
Class clazz = Class.forName(“Reflect.Student”);
//通过包名.类名的字符串,调用class. forName方法获取指定类的class实例
/**
* 注意:下面不论是反射调用setInfo还是test方法
* 都调用的obj对象的方法,obj对象实际上就是student对象
*/
Method m = clazz.getMethod(“setInfo”, String.class, String.class);
//得到名称叫setInfo, 参数是string, String的方法
Constructor con = clazz.getConstructor(); //获取无参构造
Object obj = con.newInstance();//使用无参构造创建对象
m.invoke(obj,“张三”,“第一中学”);
//参数1是需要实例化的对象,后面的参数是调用当前的方法实际参数
Method m1 = clazz.getDeclaredMethod(“test”, String.class);
//获取方法名为test,参数为1个string类型的所有方法
m1.setAccessible(true); //解除私有的封装,下面可以强制调用私有的方法|
m1.invoke(obj,“李四”);
Method m2 = clazz.getMethod(“setInfo”, int.class); //调用一个重载方法
m2.invoke(obj,18);
Method m3 = clazz.getMethod(“getSchool”); // 这是获取方法名为getSchoo1并且没有参数的方法
String school = (String)m3.invoke(obj);
//调用一个有返回值的方法,但是没有参数的方法
System.out.println(school);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();

    }
}

}

上一篇:dubbo spi


下一篇:基础篇:深入解析JAVA反射机制