在通过下列一组方法访问成员变量时,将返回Field类型的对象或数组。每个Field对象代表一个成员变量,利用Field对象可以操纵相应的成员变量。
getFields()
getField(String name)
getDeclaredFields()
getDeclaredField(String name)
============================================================================================
/**
*
*/
package 访问成员变量;
/**
* @author tianyu
*
*/
public class Example {
int i;
public float f;
protected boolean b;
private String s;
}
/**
*
*/
package 访问成员变量;
import java.lang.reflect.Field;
/**
* @author tianyu
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Example example=new Example();
Class eClass = example.getClass();//返回在运行时的类
//获取所有成员变量
Field[] fields= eClass.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
System.out.println("=========================");
Field field=fields[i];//返回缩引上的元素;
System.out.println("变量名称"+field.getName());
Class class1=field.getType();//获取类型
System.out.println("类型为:"+class1);
boolean b = true;
while(b){
//如果改成员变量的访问权限为private则会抛出异常
try {
b=false;
//获取成员变量的值
System.out.println("修改前的值为:"+field.get(example));
System.out.println();
//判断成员变量的值是否为int类型
if(class1.equals(int.class)){
System.out.println("利用setlnt()修改成员变量");
field.setInt(example, 168);
//判断是否为float类型
}else if(class1.equals(float.class)){
System.out.println("利用setFloat修改变量");
field.setFloat(example, 345.8f);
//判断是否为boolean
}else if(class1.equals(boolean.class)) {
System.out.println("利用setBoolean修改变量");
field.setBoolean(example, true);
}else {
System.out.println("利用set()修改成员变量");
field.set(example, "qqq");
}
//获得成员变量的值
System.out.println("修改后的值为:"+field.get(example));
} catch (Exception e) {
System.out.println("在设置成员变量值时抛出的异常,"
+ "下面执行setAccessible()方法");
field.setAccessible(true);
b=true;//异常抛出后b=赋值为true.
}
}
}
}
}