《黑马软件工程师》 使用反射替换类中的变量的值
《黑马程序员》 使用反射替换类中的变量的值
------- android培训、java培训、期待与您交流! ----------
public class ReflectTestPoint { private String itcastBBs = "bbs.itcast.com"; private String itheimaBBs = "bbs.itheima.com"; private String itcastWeb = "www.itcast.com"; private String itheimaWeb = "www.itheima.com"; @Override //使用这个如果方法名称错误 就报错 public String toString(){ return itcastBBs+":::=="+itheimaBBs+":::=="+itcastWeb+":::=="+itheimaWeb; } }
package cn.itcast.day02.test; import java.lang.reflect.Field; public class ReflectTestWork { /** * 测试要求: 我们使用反射获取ReflectTestPoint字节码文件中的字段,把值里面的bbs更换成wwwweb * @param args */ public static void main(String[] args) throws Exception { ReflectTestPoint rtp2 = new ReflectTestPoint(); // 我们先获取字节码文件中的所有的对象 // 因为我们的bean中是私有的字段所以我们使用DeclaredFields来进行获取 // Field[] rtps=ReflectTestPoint.class.getDeclaredFields(); Field[] rtps = rtp2.getClass().getDeclaredFields(); // 遍历数组 for (Field field : rtps) { // 因为里面有私有的方法所以我们需要开启暴力反射 field.setAccessible(true); // 开启暴力反射 // 获取字段的值 // 如何判断字段的类型了 // 如果字段是字符串的类型 if (field.getType() == String.class) { // 获取里面的值 // String oldValue=(String) field.get(new ReflectTestPoint()); String oldValue = (String) field.get(rtp2); System.out.println("字段:" + field.getName() + "原始值:" + oldValue); /** * 字段都获取出来了 字段:itcastBBs原始值:bbs.itcast.com * 字段:itheimaBBs原始值:bbs.itheima.com * 字段:itcastWeb原始值:www.itcast.com * 字段:itheimaWeb原始值:www.itheima.com */ // String newValue = oldValue.replace('b', 'w'); String newValue=oldValue.replace("bbs", "www"); // 将修改后的值设置给对象 field.set(rtp2, newValue); // 使用字段对象把修改后的值设置给对象ReflectTestPoint中的字段 System.out.println("更新后的数据:"+rtp2); /** * 字段:itcastBBs原始值:bbs.itcast.com 更新后的数据:wws.itcast.com:::==bbs.itheima.com:::==www.itcast.com:::==www.itheima.com 字段:itheimaBBs原始值:bbs.itheima.com 更新后的数据:wws.itcast.com:::==wws.itheima.com:::==www.itcast.com:::==www.itheima.com 字段:itcastWeb原始值:www.itcast.com 更新后的数据:wws.itcast.com:::==wws.itheima.com:::==www.itcast.com:::==www.itheima.com 字段:itheimaWeb原始值:www.itheima.com 更新后的数据:wws.itcast.com:::==wws.itheima.com:::==www.itcast.com:::==www.itheima.com */ //怎么实现替换字符串了? /** * 字段:itcastBBs原始值:bbs.itcast.com 更新后的数据:www.itcast.com:::==bbs.itheima.com:::==www.itcast.com:::==www.itheima.com 字段:itheimaBBs原始值:bbs.itheima.com 更新后的数据:www.itcast.com:::==www.itheima.com:::==www.itcast.com:::==www.itheima.com 字段:itcastWeb原始值:www.itcast.com 更新后的数据:www.itcast.com:::==www.itheima.com:::==www.itcast.com:::==www.itheima.com 字段:itheimaWeb原始值:www.itheima.com 更新后的数据:www.itcast.com:::==www.itheima.com:::==www.itcast.com:::==www.itheima.com */ } } } }