A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 途中ms前进 中级黑马   /  2015-5-28 23:46  /  397 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;
               
        }
       
       
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马