《黑马程序员》 使用反射替换类中的变量的值

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

				 */
			}
		}
	}

}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值