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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘兆华 中级黑马   /  2013-5-26 20:25  /  1494 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘兆华 于 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 异常  求教

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

5 个回复

正序浏览

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

同时  谢谢 给老衲解答。。  
回复 使用道具 举报
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
回复 使用道具 举报
问题1:构造函数没有公有权限;
问题2:最好加上公有无参构造函数;
问题3:建议初学不要写如此复杂的代码;
可读性极差;
希望对你有用;;;;
回复 使用道具 举报
Changer_s 发表于 2013-5-26 23:09
Constructor constructor =Class.forName("cn.itheima.bbs.Person").getConstructor(Person.class);
  Pers ...

还是继续报错...      {:3_47:}
回复 使用道具 举报
Constructor constructor =Class.forName("cn.itheima.bbs.Person").getConstructor(Person.class);
  Person p1=(Person) constructor.newInstance(new Person("abc"));
System.out.println(p1.getName());

你改改代码,试试看,应该就行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马