黑马程序员技术交流社区
标题:
用反射创建实例对象时出错
[打印本页]
作者:
coqns
时间:
2012-12-7 21:30
标题:
用反射创建实例对象时出错
本帖最后由 coqns 于 2012-12-7 22:38 编辑
如下面这段代码,我想用反射来创建对象并调用构造方法初始化二个私有成员变量。编译时无错,运行后会报“java.lang.NoSuchMethodException”,本人刚学反射,实在是搞不定,求助~
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
public class ReflectDemo{
public static void main(String[] args) throws Exception{
//通过反射来创建对象实例
Constructor c=Person.class.getConstructor(String.class,Integer.class); //这行报错
//通过反射来调用构造函数初始化name、age
Person person=(Person)c.newInstance("李四",20);
//输出
System.out.println("姓名:"+person.getName+",年龄:"+person.getAge());
}
}
class Person{
//定义属性name、age
private String name;
private int age;
Person(){
}
//构造函数初始化name、age
Person(String name,int age){
this.name=name;
this.age=age;
}
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;
}
}
复制代码
作者:
黑马王宁
时间:
2012-12-7 22:07
有两处错误
1.Constructor c=Person.class.getConstructor(String.class,int.class);
2.person的构造函数要加public修饰符
作者:
coqns
时间:
2012-12-7 22:39
非常感谢上面的二位,加了public以及Class.forName()现在程序正常不报错了
作者:
qiucheng1990
时间:
2012-12-7 23:41
JDK中说 getConstructor(Class<?>... parameterTypes)方法要反映的构造方法是此 Class 对象所表示的类的公共构造方法,其形参类型与 parameterTypes 所指定的参数类型相匹配。
所以Person的带参数的构造方法应该是public修饰的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2