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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王红霞 中级黑马   /  2012-8-3 17:03  /  1558 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王红霞 于 2012-8-3 17:20 编辑

class Person{
        private String name;
        private int age;
        public Person(String name,int age){
                this.name=name;
                this.age=age;
        }
        public String getName(){
                return name;
        }
        public int getAge(){
                return age;
        }
public class reflect {
        public static void main(String[] args) throws Exception {
                 Constructor<;Person> cons = Person.class.getConstructor(String.class,int.class);
                        
                        Person p1=(Person)cons.newInstance("lisi",13);//获取实例               
                        System.out.println(p1.getName()+":"+p1.getAge());  
               
                        //利用反射的方式调用方法获取属性值
                        Method methodsetName = Person.class.getMethod("setName", String.class);
                        methodsetName.invoke(p1, "lisi");
                        Field fieldAge=p1.getClass().getField("age");//提示空指针异常?如何解决
                        fieldAge.setInt(p1, 30);        
                        System.out.println(p1.getName()+":"+p1.getAge());
  }        
}

4 个回复

倒序浏览
本帖最后由 王渠 于 2012-8-3 17:14 编辑

你的Person类没有setName(String name){}这个方法吧。

你的Person中的age属性是私有的,私有的无法直接获取吧。
回复 使用道具 举报
王渠 发表于 2012-8-3 17:11
你的Person类没有setName(String name){}这个方法吧。

你的Person中的age属性是私有的,私有的无法直接获 ...

额  倒是有set方法   不过还真是你帮忙了啊~
回复 使用道具 举报
你的 “AGE”是私有的吧
回复 使用道具 举报
  1. mport java.lang.reflect.Constructor;
  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.Method;


  4. public class Reflect {
  5.         public static void main(String []args) throws Exception {
  6.              Constructor<Person> cons = Person.class.getConstructor(String.class,int.class);
  7.                     
  8.                     Person p1=(Person)cons.newInstance("lisi",13);//获取实例               
  9.                     System.out.println(p1.getName()+":"+p1.getAge());  
  10.             
  11.                     //利用反射的方式调用方法获取属性值
  12.                     //应该在person中定义方法setName();
  13.                     Method methodsetName = Person.class.getMethod("setName", String.class);
  14.                     System.out.println("---");
  15.                     methodsetName.invoke(p1, "lisi");
  16.                     //私有变量访问需要用到getDeclaredField()
  17.                     Field fieldAge=p1.getClass().getDeclaredField("age");//提示空指针异常?如何解决
  18.                     //传说中的暴力反射 呵呵
  19.                     fieldAge.setAccessible(true);
  20.                     fieldAge.setInt(p1, 30);        
  21.                     System.out.println(p1.getName()+":"+p1.getAge());
  22.     }        
  23. }
  24. class Person{
  25.     private String name;
  26.     private int age;
  27.     public Person(String name,int age){
  28.             this.name=name;
  29.             this.age=age;
  30.     }
  31.     public void setName(String name) {
  32.                 this.name = name;
  33.         }
  34.         public void setAge(int age) {
  35.                 this.age = age;
  36.         }
  37.         public String getName(){
  38.             return name;
  39.     }
  40.     public int getAge(){
  41.             return age;
  42.     }
  43. }
复制代码
两点需要注意:
1.反射中的方法应该如何使用
2.私有变量需要进行特殊处理

点评

嗯 确实需要注意  发表于 2012-8-3 17:56
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马