package cn.Reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class DemoReclect {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
show();
}
public static void show() throws Exception {
// TODO Auto-generated method stub
// 获取指定类。只要知道类的名字。地址都是可以的
Class clazz = Class.forName("cn.Reflect.Uesr");
/*
* 演示调用构造方法 getDeclaredConstructors()//调用的是所有分构造函数。包括私有化的
* getConstructors()//返回的是public的构造函数
*
* getConstructor(构造器的形参类型)、//返回的是public的构造函数
* getDeclaredConstructor(构造器的形参类型)//包含私有的,所有级别的
*
* o
*/
Constructor constructor = clazz.getDeclaredConstructor(String.class);// 调用其他类中的构造函数
Uesr uesr = (Uesr) constructor.newInstance("王老五");// 实例化
Constructor constructor1 = clazz.getDeclaredConstructor(String.class, int.class);
constructor1.newInstance("老王", 12);// 相当于new Uesr("老王",12);
/*
* 演示调用一般函数方法 getDeclaredMethods();获取所有的一般函数方法,包括私有
* getMethod(方法名,对应方法参数类型));//调用的是public
* getDeclaredMethod(方法名,对应方法参数类型):返回对应类指定的所有
* getMethod()//所有的public方法
*
*
*
*
*/
Method[] methods = clazz.getDeclaredMethods();// 获得所有的method方法
for (Method m : methods) {
System.out.println(m);
}
Method method = clazz.getMethod("setName", String.class);// 调用一般方法
Uesr uesr1 = (Uesr) clazz.newInstance();
method.invoke(uesr1, "瘪三");
/* System.out.println(method.invoke(uesr, "瘪三")); */
}
}