package itheima;
import java.lang.reflect.Field;
public class FiledTest {
public static void main(String[] args)throws Exception
{
//创建对象
ReflectPoint rp=new ReflectPoint(3,5);
//获取字段
Field fieldY=rp.getClass().getField("y");
//fieldY不是对象身上的变量,而是类上,要用它去取对象身上的值
System.out.println(fieldY.get(rp));
//让私有的可以看得见
Field fieldX=rp.getClass().getDeclaredField("x");
//让私有的可以强制被访问 暴力反射
fieldX.setAccessible(true);
//fieldX不是对象身上的变量,而是类上,要用它去取对象身上的值
System.out.println(fieldX.get(rp));
changeStringValue(rp);
System.out.println(rp);
}
private static void changeStringValue(Object obj)throws Exception{
//得到所有字段
Field[] fields=obj.getClass().getFields();
//迭代多有字段
for(Field field:fields)
{//判断 如果是String类型字节码
if(field.getType()==String.class){
//获取值
String oldValue=(String)field.get(obj);
//替换字符
String newValue=oldValue.replace('b','a');
//对对象身上的字段进行设置
field.set(obj, newValue);
}
}
}
}
class ReflectPoint{
private int x;
public int y;
public String s1="ball";
public String s2="basketball";
public String s3="itcast";
public ReflectPoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
public String toString(){
return s1+":"+ s2+":"+ s3;
}
} |
|