先贴上代码吧!
import java.lang.reflect.Field;
public class flect {
/**
* @param args
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
test t = new test();
changChar(t);
System.out.println(t);
}
private static void changChar(Object obj) throws IllegalArgumentException, IllegalAccessException
{
Field[] fie = obj.getClass().getFields(); //obj.getClass()得到属于他的字节码 obj.getClass().getFields()得到所属的字段
for(Field f: fie)
{
if(f.getType() == String.class) //f.getType()得到字段所属的类型
{
String strValue = (String)f.get(obj);
String newStr = strValue.replace('b', 'X');
f.set(obj, newStr);
}
}
}
}
class test
{
String str1 = "basketball"; //字符串1
String str2 = "itcast"; //字符串2
String str3 = "debug"; //字符串3
public String toString() //1.在System.out.println()或System.out.print()里写一个对象时。
//2.在用+连接一个对象和一个字符串时。 只有这两种情况会自动调用toString()方法
{
return str1 + "\n" + str2 + "\n" + str3;
}
}
运行之后反射没成功,不知道为什么! 另外求人帮我用正则改写这个替换的代码:String newStr = strValue.replace('b', 'X'); 新人求技术分哈哈 |