转自http://www.cnblogs.com/maxblog/archive/2010/09/01/1814816.html
public class FieldTest {
private int i = 0;
private float f = 0.0f;
private boolean b = true;
private String s = "";
}
public class ReflectTest {
public static void main(String[] args) throws Exception {
// Point pt1 = new Point(3,5);
// Point pt2 = new Point(6,7);
//
// //得到一个字段
// Field fieldY = pt1.getClass().getField("y"); //y 是变量名
// System.out.println(fieldY.get(pt1)); //这才是5
// System.out.println(fieldY.get(pt1)); //这才是5
//
// //暴力反射
// Field fieldX = pt1.getClass().getDeclaredField("x"); //这个管你公的私的,都拿来
// fieldX.setAccessible(true);//上面的代码已经看见钱了,开始抢了
// System.out.println(fieldX.get(pt1));
// Field[] declaredFields = pt1.getClass().getDeclaredFields();
// System.out.println(declaredFields.length);
/**
* =====================================================================
*/
FieldTest fieldTest = new FieldTest();
Field[] declaredFields = FieldTest.class.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("类型为:"+field.getType());
boolean isTurn = true;
// field.setAccessible(true);
while(isTurn)
{
try{
isTurn = false;
System.out.println("修改前的值为:"+ field.get(fieldTest));
if(fieldType.equals(int.class))
{
System.out.println("利用setInt()方法修改成员变量的值.");
field.setInt(fieldTest, 124);
}
else if(fieldType.equals(float.class))
{
System.out.println("利用setFloat()方法修改成员变量的值.");
field.setFloat(fieldTest, 9.9f);
}else if(fieldType.equals(boolean.class))
{
System.out.println("利用setBoolean()方法修改成员变量的值.");
field.setBoolean(fieldTest, false);
}
else
{
System.out.println("利用set()方法修改成员变量的值.");
field.set(fieldTest, "NWQ");
}
System.out.println("修改后的值为:"+field.get(fieldTest));
}
catch(Exception e)
{
System.out.println("在设置成员变量时发生异常,执行setAccessible()方法.");
field.setAccessible(true);
isTurn = true;
}
}
System.out.println("**************");
}
}
}