java反射获取成员变量

A:获得类的成员变量 数组

  1、getFields(公共类的)

  2、getDeclaredFields(所有类型的)

B:获得类的单个成员变量:

  1、getField (公共类的)

  2、getDeclaredField (所有类型的)

 

  A.1:获得类的公共成员变量:

//获取类的字节码文件对象    
        Class c = Class.forName("zl_Relfect_01.Person");
        
        //获得该对象的公共成员变量
        Field[] f = c.getFields();
        //遍历
        for(Field fie : f){
            System.out.println(fie);
        }

 A.2:获得类的所有成员变量:

//获取类的字节码文件对象    
        Class c = Class.forName("zl_Relfect_01.Person");
      //获取该类的所有成员变量
        Field[] f = c.getDeclaredFields();
        for(Field fie : f){
            System.out.println(fie);
        }

B.1:获得单个公共成员变量:

//获取类的字节码文件对象    
Class c = Class.forName("zl_Relfect_01.Person")
//获取单个公共的成员变量
Field f = c.getField("address");
System.out.println(f);

 B.2:获得单个所有类型的成员变量:

//获取类的字节码文件对象    
Class c = Class.forName("zl_Relfect_01.Person");
 //获取单个成员变量(所有类型)
Field f = c.getDeclaredField("name");
System.out.println(f);

通过反射获取成员变量并使用

//获取类的字节码文件对象
        Class c = Class.forName("zl_Relfect_01.Person");    
        //通过无参构造创建对象
        Constructor con = c.getConstructor();
        Object obj = con.newInstance();
        
    
        //获取私有成员变量name,并对它进行赋值
        //首先获取私有成员变量name
        Field newname = c.getDeclaredField("name");
        //成员变量name是私有的,所以得先取消语言访问检查  public void setAccessible(boolean flag)
        newname.setAccessible(true);
        //set(Object obj,Object value):将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
        //给obj里面的newname赋值为张三
        newname.set(obj, "张三");
        System.out.println(obj);//Person [name=张三, age=0, address=null]

        
        //获取默认类型成员变量age,并对它进行赋值    
        //获取age变量,并赋值
        Field newage = c.getDeclaredField("age");
        //取消语言访问检查
        newage.setAccessible(true);
        //给age赋值
        newage.set(obj, 13);
        System.out.println(obj);
        
        
        //获取公共成员变量address,并对它赋值    
        //获取address对象,并赋值
        Field newaddress = c.getDeclaredField("address");
        newaddress.set(obj, "家乡");
        System.out.println(obj);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值