- package cn.itcast.heima.technology;
- import java.lang.reflect.Field;
- class ReflectPoint {
- private int x;
- public int y;
- public String str1 = "Hello,my dear friends";
- public String str2 = "I don't think you can do that";
- public ReflectPoint(int x, int y) {
- super();
- this.x = x;
- this.y = y;
- }
- @Override
- public String toString() {
- return "ReflectPoint [str1=" + str1 + ", str2=" + str2 + "]";
- }
- }
- public class ForReflect {
- /**
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- ReflectPoint pt1 = new ReflectPoint(3,5);//pt1到低表示哪个对象?
- //你上面不是定义了类ReflectPoint,并且提供了带参数的构造方法,
- //这pt1不就是指向创建的对象new ReflectPoint(3,5)么
- Field fieldY = pt1.getClass().getField("y");//此处pt1表示什么内容
- //根据对象获得自己的Class对象,再根据Class对象获取指定名称的公公成员字段对象
-
-
- System.out.println(fieldY.get(pt1));//获取字段在对象普通pt1中的值
- changeStringValue(pt1);//此处pt1表示什么内容?
- //调用下面你定义静态的功能函数,并将pt1作为参数传递过去,pt1指向对象new ReflectPoint(3,5),引用型变量啊
-
-
- //输出对象,自动调用toString()方法
- System.out.println(pt1);
- }
- private static void changeStringValue(Object obj) throws Exception {
- Field[] fields = obj.getClass().getFields();//获取字段,明显字段可能不为一,所以返回的是数组
- for(Field field:fields)//遍历数组
- {
- //获取字段的Class类对象,并判断是不是String.class类型的
- if(field.getType().equals(String.class))
- {
-
- String oldValue = (String)field.get(obj);//获取字段在对象obj(就是传入的对象)中的值
-
- String newValue = oldValue.replace('n', 'w');//将'n'替换成'w'
-
- field.set(obj, newValue);//在指定的对象上设置字段的值。
- }
- }
- }
- /*Field fieldY = pt1.getClass().getField("y");中的pt1与changeStringValue(pt1);中的pt1相同吗?
- * 很不理解,它们具体表示什么内容,望指点迷津
- //很明显,是一样的,同样的都是对象new ReflectPoint(3,5)的引用型变量
-
- */
- }
- //还有问题可以加个好友,哈哈!
复制代码 |