在通过下列一组方法访问成员变量时,将返回Field类型的对象或数组。每个Field对象代表一个成员变量,利用Field对象可以操纵相应的成员变量。
- getField()
- getField(String name)
- getDeclaredFields()
- getDeclaredFields(String name)
如果是访问指定的成员变量,可以通过该成员变量的名称来访问。例如:访问一个名称为birthday的成员变量,访问方法如下:
object.getDeclaredField("birthday");
package zhao;
public class Example {
int i;
float f;
protected boolean b;
private String s;
}
package zhao;
import java.lang.reflect.*;
public class Demo {
public static void main(String[] args) {
zhao.Example example = new zhao.Example();
Class c = example.getClass();
// 获取所有成员变量
Field[] declareFields = c.getDeclaredFields();
for (int i = 0; i < declareFields.length; i++) {// 遍历成员变量
Field field = declareFields[i];
System.out.println("名称为:" + field.getName());// 获得成员变量名称
Class fieldType = field.getType();// 获取成员变量类型
System.out.println("类型为:" + fieldType);
boolean isTurn = true;
while (isTurn) {
// 如果该成员变量的访问权限为private,则抛出异常,即不允许访问
try {
isTurn = false;
// 获得成员变量值
System.out.println("修改前的值为:" + field.get(example));
if (fieldType.equals(int.class)) {// 判断成员变量的类型是否为int型
System.out.println("利用方法setInt()修改成员变量的值");
field.setInt(example, 168);// 为int型成员变量赋值
} else if (fieldType.equals(float.class)) {// 判断成员变量的类型是否为float型
System.out.println("利用方法setFloat()修改成员变量的值");
field.setFloat(example, 99.9F);// 为float型成员变量赋值
} else if (fieldType.equals(boolean.class)) {// 判断成员变量的类型是否为boolean型
System.out.println("利用方法setBoolean()修改成员变量的值");
field.setBoolean(example, true);// 为float型成员变量赋值
} 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