《黑马软件工程师》 使用反射替换类中的变量的值

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

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

				 */
			}
		}
	}

}