黑马程序员技术交流社区

标题: 反射问题 [打印本页]

作者: 毕博    时间: 2012-4-24 09:23
标题: 反射问题
用反射方式修改age name并获取  没有基本语法错误 不能运行
帮忙看下 不胜感激

import java.lang.reflect.*;


public class Test
{         
        public static void main(String[] args) throws Exception{
                Class c = Class.forName("Persion");
               
        Constructor constructor= c.getConstructor(Persion.class);
           Persion person1 =(Persion)constructor.newInstance(new Persion("bibo",21));
         
          Method mothod1= person1.getClass().getMethod("setAge",int.class );
           mothod1.invoke(person1, 39);
          Method mothod2= person1.getClass().getMethod("setName",String.class );
          mothod1.invoke(person1, "lala");
           Field m1= person1.getClass().getField("age");
           System.out.println(m1.get(person1));
           Field m2= person1.getClass().getField("name");
           System.out.println(m2.get(person1));
           
           
        
        }
}


class Persion
{
        public String name;
        public int age;
        public Persion(String name,int age){
                this.name=name;
                this.age=age;
        }
        public Persion(){
                this.name="lili";
                this.age=1;
        }
        public void setName(String name){
                this.name=name;
        }
        public String getName(){
                return this.name;
        }
        public void setAge(int age){
                this.age=age;
        }
        public int getAge(){
                return this.age;
        }
        
}

作者: 黑马-刘昌文    时间: 2012-4-24 09:46
Persion person1 =(Persion)constructor.newInstance(new Persion("bibo",21));  方法参数传递错误!

作者: 李震 李震 李震    时间: 2012-4-24 09:50
  1.         public static void main(String[] args) throws Exception{
  2.                      Class c = Class.forName("cn.socket.Persion");
  3.                        
  4.                    Constructor constructor= c.getConstructor();
  5.                    Persion person1 =(Persion)constructor.newInstance();
  6.                   
  7.                    Method mothod1= person1.getClass().getMethod("setAge",int.class);
  8.                          mothod1.invoke(person1, 39);
  9.                    Method mothod2= person1.getClass().getMethod("setName",String.class );
  10.                    mothod2.invoke(person1, "lala");
  11.                    Field m1= person1.getClass().getField("age");
  12.                    System.out.println(m1.get(person1));
  13.                    Field m2= person1.getClass().getField("name");
  14.                    System.out.println(m2.get(person1));
  15.                   
  16.    

  17. }

  18. public class Persion {
  19.         public String name;
  20.     public int age;

  21.     public Persion(String name,int age){
  22.             this.name=name;
  23.             this.age=age;
  24.     }
  25.     public Persion(){
  26.     }
  27.     public void setName(String name){
  28.             this.name=name;
  29.     }
  30.     public String getName(){
  31.             return this.name;
  32.     }
  33.     public void setAge(int age){
  34.             this.age=age;
  35.     }
  36.     public int getAge(){
  37.             return this.age;
  38.     }

  39. }
复制代码
Constructor constructor= c.getConstructor(Persion.class);//调用构造函数是传入的构造函数的参数,你这里传入的是对象。
Persion person1 =(Persion)constructor.newInstance(new Persion("bibo",21));//如果你通下面反射获取方法设置的话,这里应该调用空构造函数,所以不用赋值、
Method mothod2= person1.getClass().getMethod("setName",String.class );
      mothod1.invoke(person1, "lala");//这里应该是mothod2

        public Persion(){
                 this.name="lili";
                 this.age=1;
         }//你通过反射获取方法设置,这里就不用设置,用一个空的构造函数。







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