import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
class ReflectPoint {
private int x;
public int y;
public String str1 ="ball";
public String str2 ="baskball";
public String str3 ="itcast";
public ReflectPoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
public String toString(){
return str1 +":"+ str2+":"+ str3;
//return x +":"+ y+":"+ str3;
}
}
public class ReflectTest {
public static void main(String[] args) throws Exception{
ReflectPoint pt1 = new ReflectPoint(3,5);
changeStringValue(pt1);
System.out.println(pt1);
}
private static void changeStringValue(Object obj) throws Exception{
Field[] fields = obj.getClass().getFields();
for(Field field : fields){
//if(field.getType().equals(String.class))
if(field.getType() == String.class){
String oldValue = (String)field.get(obj);
String newValue = oldValue.replace('b', 'a');
field.set(obj,newValue);
}
}
}
}
这个是张老师视频中的一个小程序,我有一个疑问, changeStringValue(pt1);这句代码中传入的对象pt1,是通过ReflectPoint pt1 = new ReflectPoint(3,5); 创建的,但是ReflectPoint的构造方法中并没有调用str1,str2,str3,为什么最后编译完成后打印结果却是
aall:aaskaall:itcast 这个。难道就是因为重写了toString方法吗。我试验了一下,吧重写的toString方法换成return x +":"+ y+":"+ str3;,就会打印x,y,str3的值。这是为什么呢。 |