您的位置:首页 > 编程语言 > Java开发

java反射获取字段以及获取字段值和设置字段值

2016-03-25 17:25 525 查看
字段的获取与前面构造方法和行为方法差不多;思路一样

package javaInvokeFiled;

import java.lang.reflect.Field;

/**

 * 反射获取字段

 * @author Administrator

 *

 */

 class Filed{

     

     

     public String name;

     private int age;

     

     private  int number;

     public String password;

     

     public Filed(){

    

     }

     

 }

public class InvokeFiled {

    

    /**

     * 获取字段方法和前面获取构造器和方法大同小异。getFileds():获取所有Public修饰的字段以及继承自父类的字段   规则与获取构造和方法大同小异

     * @param args

     * @throws Exception

     */

    public static void main(String[] args) throws Exception {

        Class claz = Filed.class;

        Class claz1=Class.forName("javaInvokeFiled.Filed");

        

    Field[]  fields=    claz.getFields();

    for(Field field:fields){

        System.out.println("获取所有的public及继承的字段"+field);

    }

    

    Field[]  fieldsDecrs=claz.getDeclaredFields();

    for(Field fieldDecr:fieldsDecrs){

        System.out.println("获取所有的字段包括private/public,但不包括继承的字段"+fieldDecr);        

    }

    

    /*获取指定的字段:参数传字段名称*/

    Field field1=claz.getField("name");

    System.out.println("获取指定的public字段"+field1);

    

    /*获取指定的私有字段*/

    Field fieldP = claz.getDeclaredField("number");

    System.out.println("获取指定的私有字段:"+fieldP);
   

       

     /**

      *为字段设值:setxxx(obj,基本类型数据)基本类型字段设值;  set(obj,引用类型数据)  引用类型设值 obj为字段所在底层对象 如果是静态字段则obj可以为NULL

      */

       /*给字段设置值*/

        field1.set(claz.newInstance(), "张飞");

        System.out.println(field1.get(claz.newInstance()));

        

        /*给私有字段设置值*/

        fieldP.setAccessible(true);

        fieldP.setInt(claz.newInstance(), 12);

        System.out.println(fieldP.getInt(claz.newInstance()));

        

        

        

        /**

         *   获取字段值 :getxxx(obj) get(obj) 如果字段为static修饰则obj可以为null

         */

        /*获取私有静态字段的值*/

        Field fieldd = claz.getDeclaredField("str");

        fieldd.setAccessible(true);

            System.out.println(fieldd.get(null)+"******私有静态引用类型");

            

            /*获取私有的字段的值*/

            Field fieldnum=claz.getDeclaredField("num");

            fieldnum.setAccessible(true);

            System.out.println(fieldnum.getInt(claz.newInstance())+"******私有基本类型");

        

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java反射