将要被反射的类 package org.local; public class ReflectTest { /** * @param args */ private int x; public int y; public String str1 = "abc"; public String str2 = "access"; public ReflectTest(int x, int y) { this.x = x; this.y = y; } @Override public String toString() { return "ReflectTest [str1=" + str1 + ", str2=" + str2 + "]"; } } 反射成员变量操作 package org.local; import java.lang.reflect.Field; public class Base { /** * @param args * @throws NoSuchFieldException * @throws SecurityException * @throws IllegalAccessException * @throws IllegalArgumentException */ public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { // TODO Auto-generated method stub ReflectTest test = new ReflectTest(3, 5); //取得对象字节码 Class cls = test.getClass(); //getField只能得到可见的变量 Field fd1 = cls.getField("y");//返回的值不是test对象的变量,而是Field对象。所以下面必须通过get方法传入指定的ReflectTest对象,获取值 System.out.println("value1:" + fd1.get(test)); //getDeclaredField能够得到私有的变量 Field fd2 = cls.getDeclaredField("x"); fd2.setAccessible(true);//设置私有属性可访问 System.out.println("value1:" + fd2.get(test)); //过滤String中的a字符,替换为空 ChangeVariable(test); System.out.println(test.toString()); } private static void ChangeVariable(Object obj) throws IllegalArgumentException, IllegalAccessException { Field[] fields = obj.getClass().getFields();//获得所有对象属性 for(Field field:fields){ if( field.getType() == String.class){ String oldStr = (String) field.get(obj);//返回原先字符 String newStr = oldStr.replace('a', 'j');//替换字符中的a为j field.set(obj, newStr);//更改变量值 } } } }