黑马程序员技术交流社区
标题:
已解决,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