A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© coqns 中级黑马   /  2012-12-7 21:30  /  1713 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 coqns 于 2012-12-7 22:38 编辑

如下面这段代码,我想用反射来创建对象并调用构造方法初始化二个私有成员变量。编译时无错,运行后会报“java.lang.NoSuchMethodException”,本人刚学反射,实在是搞不定,求助~
  1. import java.lang.reflect.Constructor;
  2. import java.lang.reflect.Field;

  3. public class ReflectDemo{
  4.         
  5.         public static void main(String[] args) throws Exception{
  6.                 //通过反射来创建对象实例
  7.                 Constructor c=Person.class.getConstructor(String.class,Integer.class);                 //这行报错
  8.                 //通过反射来调用构造函数初始化name、age
  9.                 Person person=(Person)c.newInstance("李四",20);
  10.                 //输出
  11.                 System.out.println("姓名:"+person.getName+",年龄:"+person.getAge());
  12.         }
  13. }

  14. class Person{
  15.         //定义属性name、age
  16.         private String name;
  17.         private int age;
  18.         
  19.         Person(){
  20.                
  21.         }
  22.         
  23.         //构造函数初始化name、age
  24.         Person(String name,int age){
  25.                 this.name=name;
  26.                 this.age=age;
  27.         }

  28.         public String getName() {
  29.                 return name;
  30.         }
  31.         public void setName(String name) {
  32.                 this.name = name;
  33.         }
  34.         public int getAge() {
  35.                 return age;
  36.         }
  37.         public void setAge(int age) {
  38.                 this.age = age;
  39.         }
  40. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

4 个回复

倒序浏览
有两处错误
1.Constructor c=Person.class.getConstructor(String.class,int.class);  
2.person的构造函数要加public修饰符

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
非常感谢上面的二位,加了public以及Class.forName()现在程序正常不报错了
回复 使用道具 举报
JDK中说  getConstructor(Class<?>... parameterTypes)方法要反映的构造方法是此 Class 对象所表示的类的公共构造方法,其形参类型与 parameterTypes 所指定的参数类型相匹配。
所以Person的带参数的构造方法应该是public修饰的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马