本帖最后由 秦兰之 于 2013-6-17 06:07 编辑
ReflectPoint1.java
package cn.itcast.day1;
public class ReflectPoint1 {
public String str1 ="ball";
public String str2 ="basketball";
public String str3 ="itcast";
@Override //@Override验证toString方法是否正确。
public String toString(){
return str1+" : "+str2+" : "+str3+" : ";
}
}
ReflectText1.java
package cn.itcast.day1;
import java.lang.reflect.Field;
public class ReflectTest1 {
public static void main(String[] args)throws Exception {
ReflectPoint pt1=new ReflectPoint(3,5); //自定义一个成员变量的反射对象。
Field fieldY=pt1.getClass().getField("y"); //获取反射对象中类的字段,自定义一个字段对象。
//fieldY的值是多少,是5,错!fieldY不是对象身上的变量,而是类上,要用它去取某个对象上对应的值。
System.out.println(fieldY.get(pt1)); //打印该反射对象中字段对象的值。
Field fieldX=pt1.getClass().getDeclaredField("x"); //getDeclaredField():无论是否可见都要获取该字段。
fieldX.setAccessible(true); //设置访问权限为true.
System.out.println(fieldX.get(pt1));
changeStringvalue(pt1);
System.out.println(pt1);//这句代码没写,所以我以为field.set(obj, newvalue); 没执行。谢谢各位。
}
//将字段中的b替换成a.
private static void changeStringvalue(Object obj) throws Exception {
Field[] fields=obj.getClass().getFields(); //获取字段对象数组
for(Field field : fields){ //遍历字段对象数组
if(field.getType()==String.class){ //判断字段类型地址值是否相等。
String oldvalue=(String)field.get(obj); //获取该字段对象数组的旧值,自定义一个字符串对象存储旧值。抛出异常。
String newvalue=oldvalue.replace('b', 'a'); //使用新值替换旧值,自定义一个字符串对象存储 替换后的新值。
field.set(obj, newvalue); //设置打印字段对象替换后的新值。//这句话怎么不执行?
}
}
}
}
|