一.
如何获得某个类所对应的Class对象?
1.通过类的.class语法2.a.通过类的实例的getClass()方法(Object里有这个方法:返回此 对象 的运行时类。)
b.通过第一种方法得到的结果,然后调用getClass()方法也可以
3.通过Class类的静态方法forName()
二.
通过反射方式来调用某个对象的方法的步骤
1.得到该对象所对应的Class对象2.通过该Class对象得到该类的构造方法所对应的Constructor对象
3.通过该Constructor对象的newInstance方法得到该类的一个实例(对象)
4.通过该Class对象得到该方法所对应的Method对象
5.通过该Method对象的invoke方法进行调用
public class DemoTest2 {
public DemoTest2(String s1, String s2) {
System.out.println(s1);
System.out.println(s2);
}
public void output(String str) {
System.out.println("hello:" + str);
}
public static void main(String[] args) throws Exception {
/**
* 通过反射实现
* */
Class<DemoTest2> clazz = DemoTest2.class;
// 返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
Constructor<DemoTest2> cons = clazz.getConstructor(new Class[] {
String.class, String.class });
// 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
Method method = clazz.getMethod("output", new Class[] { String.class });
// 使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
DemoTest2 test = cons.newInstance(new Object[] { "abc", "xyz" });// 如果上面不使用泛型,这块就要强制类型转换
// 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法
method.invoke(test, new Object[] { "zhangsan" });
/**
* 通过原始的写法显示
* */
// new DemoTest2("Java","HuanHuan").output("zhangsan");
}
}
三.
如果想调用类的带参数的构造方法为类生成实例,那么只能通过Constructor类的newInstance方法实现
如果想调用类的不带参数的构造方法为类生成实例,那么就有两种方式:1.还是通过Constructor类的newInstance方法实现
2.通过Class类的newInstance方法实现