用反射得到的一个class类 在调用它的public T newInstance()方法,可以创建此 Class 对象所表示的类的一个新实例,
但是用该方法得到的如同用一个带有一个空参数列表的 new 表达式实例化该类。
如果该类没有定义构造函数系统会定义一个无参数的构造函数 Person() { };
当定义了一个构造函数: public Person(String name, int age) { this.age=age; this.name=name; }时
该类就不会再有无参数的构造函数了
所以该方法会报告错误。
代码改动一下希望你能理解
class Person{
private String name;
private int age;
public Person() {
System.out.println("被调用");
}
public Person(String name, int age) {
this.age=age;
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString(){
return "["+this.name+" "+this.age+"]";
}
}
class reflectTest{
public static void main(String[] args) {
Class<?> demo=null;
try{
demo=Person.class;
}catch (Exception e) {
e.printStackTrace();
}
Person per=null;
try {
per=(Person)demo.newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
per.setName("lisi");
per.setAge(20);
System.out.println(per);
}
}
运行结果
被调用
[lisi 20]
|