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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天下 中级黑马   /  2013-11-3 11:49  /  1152 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 天下 于 2013-11-8 23:34 编辑

我也是根据学习的知识,做的练习代码,为什么就出错呢?红色位置报错
我用反射,获取构造方法,调用带参数的构造方法,创建实例对象
  1. package Test;

  2. class Animal{
  3.         private String name;
  4.         public Animal(){}
  5.         public void dog(){
  6.                 System.out.println("小狗小狗汪汪叫------");
  7.         }
  8.         public  Animal(String name){
  9.                  this.name=name;
  10.                
  11.          }
  12.         public String toString(){
  13.                  System.out.println("带参数的构造函数:"+name);
  14.                  return "";
  15.         }
  16.         public String toString(String s){
  17.                  System.out.println("带参数的构造函数:"+name);
  18.                  System.out.println("带参数的方法:"+s);
  19.                  return "";
  20.         }
  21. }
  22. package Test;

  23. import java.lang.reflect.Constructor;
  24. import java.lang.reflect.Method;

  25. public class ConstructorDemo {

  26.         /**
  27.          * @param args
  28.          */
  29.         public static void main(String[] args)throws Exception {
  30.                 // TODO Auto-generated method stub
  31.                 Class c=Animal.class;
  32.                
  33.                 //获取所有的公共的构造方法,并且打印
  34.                 Constructor[] con1=c.getConstructors();
  35.                 for(int i=0;i<con1.length;i++){
  36.                         System.out.println(con1[i].toString());
  37.                 }
  38.                
  39.                
  40.                 //调用带参数的构造方法进行创建实例对象
  41. <span style="background-color: rgb(255, 192, 203);">                Constructor con2=c.getConstructor(String.class);
  42.                 Animal a1=(Animal)con2.newInstance("阿黄");
  43. </span>               
  44.                 Method m=c.getMethod("toString",null);
  45.                 m.invoke(a1, args);
  46.         
  47.                 Method m1=c.getMethod("toString",new Class[]{String.class});
  48.                 m1.invoke(a1, new Object[]{"你好!!!!"});
  49.                 /*Constructor con=c.getConstructor(null);
  50.                 Method m=c.getMethod("dog", null);
  51.                 System.out.println(con.getName());
  52.                 Animal a=(Animal)con.newInstance(null);
  53.                 m.invoke(a,args);
  54.                 */
  55.         }

  56. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

4 个回复

正序浏览
ysunday 发表于 2013-11-8 21:18
不好意思我不知道哪里错了。我用jdk1.7编译运行都过了
并没有出现你说的错误。
附上运行结果

我也不知所以然,我修改过后,该好了,
不过代码该成了这样子:
  1. //调用带参数的构造方法进行创建实例对象
  2.                 Constructor con2=c.getConstructor(new Class[]{String.class});
  3.                 Animal a1=(Animal)con2.newInstance(new Object[]{"阿黄"});
复制代码
回复 使用道具 举报
不好意思我不知道哪里错了。
  1. package bbs.test;
  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.Method;

  4. public class Test01 {
  5.         public static void main(String[] args) {
  6.         }

  7. }

  8. class Animal{
  9.         private String name;
  10.         public Animal(){}
  11.         public void dog(){
  12.                 System.out.println("小狗小狗汪汪叫------");
  13.         }
  14.         public  Animal(String name){
  15.                  this.name=name;
  16.                
  17.          }
  18.         public String toString(){
  19.                  System.out.println("带参数的构造函数:"+name);
  20.                  return "";
  21.         }
  22.         public String toString(String s){
  23.                  System.out.println("带参数的构造函数:"+name);
  24.                  System.out.println("带参数的方法:"+s);
  25.                  return "";
  26.         }
  27. }


  28. class ConstructorDemo {

  29.         /**
  30.          * @param args
  31.          */
  32.         public static void main(String[] args)throws Exception {
  33.                 // TODO Auto-generated method stub
  34.                 Class c=Animal.class;
  35.                
  36.                 //获取所有的公共的构造方法,并且打印
  37.                 Constructor[] con1=c.getConstructors();
  38.                 for(int i=0;i<con1.length;i++){
  39.                         System.out.println(con1[i].toString());
  40.                 }
  41.                
  42.                
  43.                 //调用带参数的构造方法进行创建实例对象
  44.                 Constructor con2=c.getConstructor(String.class);
  45.                 Animal a1=(Animal)con2.newInstance("阿黄");
  46.                 Method m=c.getMethod("toString",null);
  47.                 m.invoke(a1, args);
  48.         
  49.                 Method m1=c.getMethod("toString",new Class[]{String.class});
  50.                 m1.invoke(a1, new Object[]{"你好!!!!"});
  51.                 /*Constructor con=c.getConstructor(null);
  52.                 Method m=c.getMethod("dog", null);
  53.                 System.out.println(con.getName());
  54.                 Animal a=(Animal)con.newInstance(null);
  55.                 m.invoke(a,args);
  56.                 */
  57.         }

  58. }
复制代码
我用jdk1.7编译运行都过了
并没有出现你说的错误。
附上运行结果
public bbs.test.Animal(java.lang.String)
public bbs.test.Animal()
带参数的构造函数:阿黄
带参数的构造函数:阿黄
带参数的方法:你好!!!!
回复 使用道具 举报
狼王 发表于 2013-11-3 12:01
Animal类中没有带参的构造函数

不好意思啊,   刚才的代码没有贴完全
报错的代码:       
                //调用带参数的构造方法进行创建实例对象
                Constructor con2=c.getConstructor(String.class);
                Animal a1=(Animal)con2.newInstance("阿黄");
回复 使用道具 举报
Animal类中没有带参的构造函数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马