访问成员变量
通过表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() | 获得可以解析出该成员变量所采取修饰符的整数 |
/*
* 访问成员变量
* 首先创建一个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