Class类的作用
Class主要是反射的源头,不仅可以取得对象所在类的信息,也可以直接通过Class类的方法进行对象的实例化操作。
正常情况下我们通过关键字new进行对象实例化,如果现在已经实例化好的Class对象,则可以通过Class类中提供的方法
public T newInstance()
来实例化某个对象。
注意:在Person中必须存在一个无参数的构造方法。
Class<?> class = Class.forName(com.test.demo.Person);
Person person = (Person)class.newInstance();
上面的操作等价于:
Person person = new Person();
以上的操作注意到问题:
1.在使用以上操作的时候读者一定要记住,被实例化对象的类中必须存在无参数构造方法,如果不存在的话,则是无法实例化的
2.对于以上程序,可以通过其他方式实例化操作,我们可以使用Constructor来实例化带参数的构造方法
Constructor常用方法:
int | getModifiers() 以整数形式返回此 Constructor 对象所表示构造方法的 Java 语言修饰符。 |
String | getName() 以字符串形式返回此构造方法的名称。 |
Class<?>[] | getParameterTypes() 按照声明顺序返回一组 Class 对象,这些对象表示此 Constructor 对象所表示构造方法的形参类型。 |
T | newInstance(Object... initargs) 使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。 |
Class<?> c = null ; // 声明Class对象
try{
c = Class.forName("org.lxh.demo15.instancedemo.Person") ;
}catch(ClassNotFoundException e){
e.printStackTrace() ;
}
Person per = null ; // 声明Person对象
Constructor<?> cons[] = null ;
cons = c.getConstructors() ;
try{
per = (Person)cons[0].newInstance("fly",30) ; // 实例化对象
}catch(Exception e){
e.printStackTrace() ;
}
但是,从实际角度看,如果要使用反射进行对象的实例化操作,最好在类中存在无参数构造方法。