黑马程序员技术交流社区

标题: 已解决,java反射问题 [打印本页]

作者: strawberry2013    时间: 2013-5-15 16:29
标题: 已解决,java反射问题
本帖最后由 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);
}
}

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

作者: rosv    时间: 2013-5-15 17:02
getConstructor返回的是一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
默认情况下构造方法的权限和类相同,在此时default,把上句改成下面的,就可以了,
Constructor<Person> con = Person.class.getDeclaredConstructor(String.class,int.class);
getDeclaredConstructor得到的是声明的构造方法,就算私有也能得到。
作者: strawberry2013    时间: 2013-5-15 17:08
谢谢楼上提醒
作者: 小小太阳    时间: 2013-5-15 17:15
在Person的构造方法前加一个public,公共构造方法,查文档的时候看到的,可以运行输出,感觉是这样,试着解决的,呵呵
作者: 燕国庆    时间: 2013-5-15 17:16
Person(String name, int age)
{
  this.name = name;
  this.age = age;
}

把这个构造函数访问权限改为public就好了
public Person(String name, int age)
{
  this.name = name;
  this.age = age;
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2