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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 赵玮_Tom 于 2012-5-4 14:39 编辑
  1. import java.lang.reflect.*;
  2. class Person// 定义Person类
  3. {
  4. private String name;
  5. private int age;
  6. Person(String name, int age)
  7. {
  8. this.name=name;
  9. this.age=age;
  10. }
  11. public void setName(String name)
  12. {
  13. this.name=name;
  14. }
  15. public void setAge(int age)
  16. {
  17. this.age=age;
  18. }
  19. public String getName()
  20. {
  21. return this.name;
  22. }
  23. public int getAge()
  24. {
  25. return this.age;
  26. }
  27. public String toString()
  28. {
  29. return "姓名:"+this.name+"; 年龄:"+this.age;
  30. }
  31. }

  32. class InstanceDemo2
  33. {
  34. public static void main(String args [])throws Exception
  35. {
  36. Class<?> c1 = Class.forName("Person");
  37. Constructor<?> [] cons = c1.getConstructors();//得到Person类中所有的构造方法

  38. //Person类中只有一个构造方法,所以cons[0]代表这个唯一的构造方法
  39. //运行出现错误:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
  40. // at InstanceDemo2.main(InstanceDemo2</FONT><FONT color=red>.java:40)到底是为什么?

  41. Person per = (Person)cons[0].newInstance("lisi", 30);

  42. System.out.println(per.toString());
复制代码

2 个回复

正序浏览
这个首先在于你的构造函数上面没有加任何的修饰符。
那么就是使用默认的修饰符。
其实默认的修饰符和public是不一样的。
public为所有的类都可以去访问。
默认修饰符则为只能在被告同一个包中的类去访问。
还有就是你可以去查是API文档。那这个Class的getConstructors()
中能去获得公有的构造函数。而于默认的是不行的。

如果要获得其他的修饰符的构造方法则可以用:
getDeclaredConstructors() 这个则可以获得所有的构造方法。
谢谢!
回复 使用道具 举报
        public  Person(String name, int age) {
                this.name = name;
                this.age = age;
        }
构造函数前要加public
getConstructors()
          返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马