问题看下面红色标注部分,望老鸟给予详细解答,搞不清楚问题,后面很难学懂得
import java.io.FileReader;
import java.lang.reflect.Constructor;
public class ReflectDemo2 {
/**
* @param args
* @throws Exception
* @throws InstantiationException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, Exception {
createNewObject_2();
}
public static void createNewObject_2() throws Exception {
// cn.itcast.bean.Person p = new cn.itcast.bean.Person("小强",39);
/*
* 当获取指定名称对应类中的所体现的对象时,
* 而该对象初始化不使用空参数构造该怎么办呢?
* 既然是通过指定的构造 函数进行对象的初始化,
* 所以应该先获取到该构造函数。 通过字节码文件对象即可完成。
* 该方法是:getConstructor(paramterTypes);
*
*/
String name = "cn.itcast.bean.Person";
//找寻该名称类文件,并加载进内存,并产生Class对象。
Class clazz = Class.forName(name);
//获取到了指定的构造函数对 象。
Constructor constructor = clazz.getConstructor(String.class,int.class); //getConstructor(String.class,int.class)中的参数是怎么确定?为什么就是String.class和int.class,参数类型为什么又写成(String.class,int.class)这种形式的呢?知道是通过getConstructor方法获得Person类中的构造方法的,Person类中的构造方法是 Person(String name, int age),假如现在不知道Person类中的有参构造方法中的参数有几个呢?,Class是怎么知道这个Person类中有参构造函数的参数个数的?
//通过该构造器对象的newInstance方法进行对象的初始化。
Object obj = constructor.newInstance("小明",38);
}
}
|