首先创建GetFieldTest 类,
package ray0705;
public class GetFieldTest {
int i;
public float f;
protected boolean b;
private String s;
}
编写测试类GetFieldMain 类,通过反射获取GetFieldTest类中所有成员变量的相关信息。
package ray0705;
import java.lang.reflect.*;
public class GetFieldMain {
public static void main(String args[]) {
GetFieldTest example = new GetFieldTest();
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 {
isTurn = false;
System.out.println("修改前的值为 : " + field.get(example));
if (fieldType.equals(int.class)) {
System.out.println("利用方法setInt()修改成员变量的值");
field.setInt(example, 155);
} else if (fieldType.equals(float.class)) {
System.out.println("利用方法setFloat()修改成员变量的值");
field.setFloat(example, 201.3F);
} else if (fieldType.equals(boolean.class)) {
System.out.println("利用方法setBoolean()修改成员变量的值");
field.setBoolean(example, true);
} else {
System.out.println("利用方法set()修改成员变量的值");
field.set(example, "MVP");
}
System.out.println("修改后的值为 : " + field.get(example));
} catch (Exception e) {
System.out.println("在设置成员变量值时抛出异常,下面执行setAccessible()方法");
field.setAccessible(true); //设置为允许访问
isTurn = true; //返回执行
}
}
System.out.println();
}
}
}
结果
发现变量s需要执行setAccessible()方法,因为是private.
以上是反射(1)