黑马程序员技术交流社区
标题:
反射 获取构造器并创建对象时 数组角标越界
[打印本页]
作者:
赵玮_Tom
时间:
2012-5-4 14:31
标题:
反射 获取构造器并创建对象时 数组角标越界
本帖最后由 赵玮_Tom 于 2012-5-4 14:39 编辑
import java.lang.reflect.*;
class Person// 定义Person类
{
private String name;
private int age;
Person(String name, int age)
{
this.name=name;
this.age=age;
}
public void setName(String name)
{
this.name=name;
}
public void setAge(int age)
{
this.age=age;
}
public String getName()
{
return this.name;
}
public int getAge()
{
return this.age;
}
public String toString()
{
return "姓名:"+this.name+"; 年龄:"+this.age;
}
}
class InstanceDemo2
{
public static void main(String args [])throws Exception
{
Class<?> c1 = Class.forName("Person");
Constructor<?> [] cons = c1.getConstructors();//得到Person类中所有的构造方法
//Person类中只有一个构造方法,所以cons[0]代表这个唯一的构造方法
//运行出现错误:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
// at InstanceDemo2.main(InstanceDemo2</FONT><FONT color=red>.java:40)到底是为什么?
Person per = (Person)cons[0].newInstance("lisi", 30);
System.out.println(per.toString());
复制代码
作者:
姚鑫
时间:
2012-5-4 15:14
public Person(String name, int age) {
this.name = name;
this.age = age;
}
构造函数前要加public
getConstructors()
返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有
公共构造方法
。
作者:
杨志
时间:
2012-5-4 17:15
这个首先在于你的构造函数上面没有加任何的修饰符。
那么就是使用默认的修饰符。
其实默认的修饰符和public是不一样的。
public为所有的类都可以去访问。
默认修饰符则为只能在被告同一个包中的类去访问。
还有就是你可以去查是API文档。那这个Class的getConstructors()
中能去获得公有的构造函数。而于默认的是不行的。
未命名.jpg
(18.38 KB, 下载次数: 20)
下载附件
2012-5-4 17:12 上传
如果要获得其他的修饰符的构造方法则可以用:
getDeclaredConstructors() 这个则可以获得所有的构造方法。
谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2