访问成员变量

访问成员变量

通过表1中的方法可以访问成员变量时,将返回Field类型的对象或数组。每个对象代表一个成员变量,利用Field对象可以操纵相应的成员变量。

Field类的常用方法

方法 说明
getName() 获得该成员变量的名称
getType() 获得表示该成员变量类型的Class对象
get(Object obj) 获得指定对象obj中成员变量的值,返回值为Object型
set(Object obj,Object value) 将指定对象obj中成员变量设置为value
getInt(Object obj) 获得指定对象obj中类型为int的成员变量的值
setInt(Object obj,int i) 将指定对象obj中类型为int的成员变量设置为i
getFloat(Object obj) 获得指定对象obj中类型为float的成员变量的值
setFloat(Object obj,float f) 将指定对象obj中类型为float的成员变量设置为f
getBoolean(Object obj) 获得指定对象obj中类型为bolean的成员变量的值
setBoolean(Object obj,boolean z) 将指定对象obj中类型为boolean的成员变量设置为z
setAccessible(boolean flag) 此方法可以设置是否忽略权限限制直接访问private等私有权限的成员变量
getModifiers() 获得可以解析出该成员变量所采取修饰符的整数
package java反射;
/*
 * 访问成员变量
 * 首先创建一个Example_02类,在该类中依次声明一个int,float,boolean,和String型的成员变量
 * 并将它们设置成为不同的访问权限。
 */
public class Example_02 {
    int i;
    public float f;
    protected boolean b;
    private String s;
}

package java反射;

import java.lang.reflect.Field;

public class Main_02 {

    public static void main(String[] args) {
        Example_02 example=new Example_02();
        Class exampleC=example.getClass();
        //获得所有成员变量
        Field[] declaredFields=exampleC.getDeclaredFields();
        for(int i=0;i<declaredFields.length;i++) {
            //遍历成员变量
            Field field=declaredFields[i];
            //获得成员变量名称
            System.out.println("名称为:"+field.getName());
            //获得成员变量类型
            Class fieldType=field.getType();
            System.out.println("类型为:"+fieldType);
            boolean isTurn=true;
            while(isTurn) {
                try {
                    //如果该成员变量的访问权限为private,则抛出异常,即不允许访问
                    isTurn=false;
                    //获得成员变量值
                    System.out.println("修改前的值为:"+field.get(example));
                    //判断成员变量的类型是否为int型
                    if(fieldType.equals(int.class)) {
                        System.out.println("利用方法setInt()修改成员变量的值");
                        //为int型成员变量赋值
                        field.setInt(example, 168);
                    }//判断成员变量的类型是否为float型
                    else if(fieldType.equals(float.class)) {
                        System.out.println("利用方法setFloat()修改成员变量的值");
                        //为float变量赋值
                        field.setFloat(example, 99.9f);
                    }else if(fieldType.equals(boolean.class)){
                        System.out.println("利用方法setBoolean()修改成员变量的值");
                        //为Boolean变量赋值
                        field.setBoolean(example, true);
                    }else {
                        System.out.println("利用set()方法修改成员变变量的值");
                        //可以为各种类型的成员变量赋值
                        field.set(example, "MWQ");
                    }
                    //获得成员变量
                    System.out.println("修改后的值:"+field.get(example));
                }
             catch (Exception e) {
                System.out.println("在设置成员变量值是抛出异常,下面执行setAccessible()!");
                field.setAccessible(true);//设置为允许访问
                isTurn=true;
            }
            }
            System.out.println();
        }
    }

}

运行结果

名称为:i
类型为:int
修改前的值为:0
利用方法setInt()修改成员变量的值
修改后的值:168

名称为:f
类型为:float
修改前的值为:0.0
利用方法setFloat()修改成员变量的值
修改后的值:99.9

名称为:b
类型为:boolean
修改前的值为:false
利用方法setBoolean()修改成员变量的值
修改后的值:true

名称为:s
类型为:class java.lang.String
在设置成员变量值是抛出异常,下面执行setAccessible()!
修改前的值为:null
利用set()方法修改成员变变量的值
修改后的值:MWQ



猜你喜欢

转载自blog.csdn.net/qq_41978199/article/details/80666597
今日推荐