黑马程序员技术交流社区

标题: 反射出现NoSuchMethodException [打印本页]

作者: 刘兆华    时间: 2013-5-26 20:25
标题: 反射出现NoSuchMethodException
本帖最后由 刘兆华 于 2013-5-27 02:48 编辑

我一共有两个类: Person  和ReflectTest
  1. public class Person {              //Person类
  2.         private String name;
  3.         private int age;
  4.         Person(String name,int age){
  5.                 this.name=name;
  6.                 this.age=age;
  7.         }
  8.         public void setName(String name){
  9.                 this.name=name;
  10.         }
  11.         public void setAge(int age){
  12.                         this.age=age;
  13.         }
  14.         public String getName(){
  15.                 return name;
  16.         }
  17.         public int getAge(){
  18.                 return age;
  19.         }
  20.         Person(String name)
  21.         {
  22.                 this.name=name;
  23.                 this.age=0;
  24.         }
  25.         Person(int age)
  26.         {
  27.         this.age=age;
  28.         this.name="";
  29.         }
  30.         
复制代码
  1. package cn.itheima.bbs;

  2. import java.lang.reflect.*;   //ReflectTest类

  3. public class ReflectTest {

  4.         /**
  5.          * @param args
  6.          */
  7.         public static void main(String[] args) throws Exception  {
  8.                 // TODO Auto-generated method stub
  9.                
  10.                 Person p1=(Person)Class.forName("cn.itheima.bbs.Person").getConstructor(String.class).newInstance(new String("abc"));
  11.                 System.out.println(p1.getName());
  12.         }

  13. }
复制代码
运行时发生NoSuchMethodException 异常  求教
作者: Changer_s    时间: 2013-5-26 23:09
Constructor constructor =Class.forName("cn.itheima.bbs.Person").getConstructor(Person.class);
  Person p1=(Person) constructor.newInstance(new Person("abc"));
System.out.println(p1.getName());

你改改代码,试试看,应该就行了
作者: 刘兆华    时间: 2013-5-26 23:34
Changer_s 发表于 2013-5-26 23:09
Constructor constructor =Class.forName("cn.itheima.bbs.Person").getConstructor(Person.class);
  Pers ...

还是继续报错...      {:3_47:}
作者: Miss小强    时间: 2013-5-26 23:40
问题1:构造函数没有公有权限;
问题2:最好加上公有无参构造函数;
问题3:建议初学不要写如此复杂的代码;
可读性极差;
希望对你有用;;;;
作者: Changer_s    时间: 2013-5-27 01:23
People类中  》》》》加个public(如下)
public  Person(String name)   
        {
                this.name=name;
                this.age=0;
        }


ReflectTest 类中:   》》》修改为下面的代码
            Constructor constructor =Class.forName("cn.itheima.bbs.Person").getConstructor(String.class);
            Person p1=(Person) constructor.newInstance("abc");
            System.out.println(p1.getName());

刚刚亲自尝试了一遍,有结果了:abc
作者: 刘兆华    时间: 2013-5-27 02:47

恩   我也刚刚自己测试出来了...  哈哈   我以为一个破构造函数还的加什么Public     老衲终于可以放下困惑了。  

同时  谢谢 给老衲解答。。  




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