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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© strawberry2013 中级黑马   /  2013-5-15 16:29  /  1235 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 strawberry2013 于 2013-5-15 17:08 编辑

import java.lang.reflect.*;
class Demo1
{
public static void main(String[] args) throws Exception
{
  Person p = new Person("s",20);
  Constructor<Person> con = Person.class.getConstructor(String.class, int.class); //error
  //Exception in thread "main" java.lang.NoSuchMethodException: Person.<init>(java.lang.String, int)
  Person p1 = con.newInstance("zhangsan", 22);
  p1.show();
}
}
class Person
{
private int age;
private String name;
Person(String name, int age)
{
  this.name = name;
  this.age = age;
}
public void show()
{
  System.out.println(name+":"+age);
}
}

//在获取构造方法时,不知道哪里出现了错误,实在不解,烦请个为同学帮帮忙~~

4 个回复

倒序浏览
getConstructor返回的是一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
默认情况下构造方法的权限和类相同,在此时default,把上句改成下面的,就可以了,
Constructor<Person> con = Person.class.getDeclaredConstructor(String.class,int.class);
getDeclaredConstructor得到的是声明的构造方法,就算私有也能得到。
回复 使用道具 举报
谢谢楼上提醒
回复 使用道具 举报
在Person的构造方法前加一个public,公共构造方法,查文档的时候看到的,可以运行输出,感觉是这样,试着解决的,呵呵
回复 使用道具 举报
Person(String name, int age)
{
  this.name = name;
  this.age = age;
}

把这个构造函数访问权限改为public就好了
public Person(String name, int age)
{
  this.name = name;
  this.age = age;
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马