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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© nestor 中级黑马   /  2014-4-17 09:06  /  1195 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 nestor 于 2014-4-17 14:54 编辑

代码:
  1. package javaGXJS.fanShe;

  2. import java.lang.reflect.Constructor;

  3. class Person{
  4.     private String name;
  5.     private int age;
  6.    
  7.     public Person() {
  8.          
  9.     }
  10.     public Person(String name){
  11.         this.name=name;
  12.     }
  13.     public Person(int age){
  14.         this.age=age;
  15.     }
  16.     public Person(String name, int age) {
  17.         this.age=age;
  18.         this.name=name;
  19.     }
  20.     public String getName() {
  21.         return name;
  22.     }
  23.     public int getAge() {
  24.         return age;
  25.     }
  26.     @Override
  27.     public String toString(){
  28.         return "["+this.name+"  "+this.age+"]";
  29.     }
  30. }

  31. class reflect{
  32.     public static void main(String[] args) throws Exception {
  33.         Class demo=Class.forName("javaGXJS.fanShe.Person");

  34.         Person per1=new Person();
  35.         Person per2=null;
  36.         Person per3=null;
  37.         Person per4=null;
  38.         //取得全部的构造函数
  39.         Constructor[] cons=Class.forName("javaGXJS.fanShe.Person").getConstructors();
  40.         
  41.         per1=(Person)cons[0].newInstance(new Person());
  42.         per2=(Person)cons[1].newInstance("Rollen");
  43.         per3=(Person)cons[2].newInstance(20);
  44.         per4=(Person)cons[3].newInstance("Rollen",20);

  45.         System.out.println(cons[0]);
  46.         System.out.println(cons[1]);
  47.         System.out.println(cons[2]);
  48.         System.out.println(cons[3]);
  49.     }
  50. }
复制代码
报错代码:
per1=(Person)cons[0].newInstance(new Person());
        per2=(Person)cons[1].newInstance("Rollen");
        per3=(Person)cons[2].newInstance(20);
        per4=(Person)cons[3].newInstance("Rollen",20);

错误信息:
  1. Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
  2.         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  3.         at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
  4.         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  5.         at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
  6.         at javaGXJS.fanShe.reflect.main(dfgfdgfdg.java:45)
复制代码




评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

3 个回复

倒序浏览
  1.                 //取得全部的构造函数 这里获取的是构造函数

  2. Constructor[] cons=Class.forName("javaGXJS.fanShe.Person").getConstructors();  
  3. //你用构造函数newInstance 是构造函数的实例  它的类型还是构造函数的类型啊,怎么能转成Person呢?
  4. per1=(Person)cons[0].newInstance(new Person());
  5. per2=(Person)cons[1].newInstance("Rollen");
  6. per3=(Person)cons[2].newInstance(20);
  7. per4=(Person)cons[3].newInstance("Rollen",20);
复制代码
回复 使用道具 举报 0 1
本帖最后由 shi0000 于 2014-4-17 10:23 编辑

因为输出的构造方法,不是你给定的顺序,而且你 第一个不能再括号里放入对象new Person()刚才测试了以下,构造方法依次是
        per1=(Person)cons[0].newInstance();               //这里没有new Person()
        per2=(Person)cons[1].newInstance("Rollen");
        per3=(Person)cons[2].newInstance(20);
        per4=(Person)cons[3].newInstance("Rollen",20);

而且一般情况下,你是要判断参数来确定构造函数的

回复 使用道具 举报
同意,你将你main程序中的代码稍微调整下就能通过了。
  1.     public static void main(String[] args) throws Exception {
  2.         Class demo = Class.forName("Person");
  3.         
  4.         Person per1=new Person();
  5.         Person per2=null;
  6.         Person per3=null;
  7.         Person per4=null;
  8.         //取得全部的构造函数
  9.         Constructor[] cons=Class.forName("Person").getConstructors();
  10.         
  11.         System.out.println(cons[0]);
  12.         System.out.println(cons[1]);
  13.         System.out.println(cons[2]);
  14.         System.out.println(cons[3]);
  15.         
  16.         per1=(Person)cons[0].newInstance("Rollen",20);
  17.         per2=(Person)cons[1].newInstance(20);
  18.         per3=(Person)cons[2].newInstance();
  19.         per4=(Person)cons[3].newInstance("Rollen");


  20.     }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马