基础加强篇之-----反射

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

1、通过反射得到String类中的charAt方法

String str1 = "abc";
这边建立了一个字符串的对象

Method methodCharAt = String.class.getMethod("charAt", int.class);//通过反射的方式得到字节码里的方法
		System.out.println(methodCharAt.invoke(str1, 1));//调用str1的方法并传入参数
		//如果按照jdk1.4的语法来调用,由于还没有可变参数,因此一个参数要为数组
		System.out.println(methodCharAt.invoke(str1, new Object[]{2}));
		/**
		 *  new Object[]{2} 这句话的意思是有一个object类型的数组里面只有一个元素就是2
		 * */
如以上代码所示,我通过反射的方式,获取了String类中的charAt方法,然后让str1这个对象去调用,结果,我就可以去到索引1代表的字符,至此,要引出一个张孝祥老师在视频中讲的很经典的一句话, 反射,其实就是将一个类中的各种成分映射成为对应的java类

2、用反射的方式去替换另一个类中的字符串成员的字符

首先,我这边先给出我要用来反射的类,我的目的是为了将String类型的值中的b换成a

public class ReflectPoint {
	private int x;
	public int y;
	//快捷键生成的构造函数   Alt+Shift+S 然后选择 Constructor using fields
	public ReflectPoint(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}
	
	/**  练习 把下面的字符串中有b的通通改成a
	 *   方法在 ReflectTest类中
	 * */
	public String str1 = "ball";
	public String str2 = "basketball";
	public String str3 = "itcast";
}
我是我在学习的代码的基础上简化后的代码,没有提供对私有成员的get 和set方法,因为在本程序中是使用不到的

下面的就是我如何去使用反射,获取到ReflectPoint中的成员,然后找到String类型的成员,然后将成员的值进行替换

import java.lang.reflect.*;
import java.util.Arrays;

public class ReflectTest {
	public static void main(String[] args) throws Exception {
		ReflectPoint pt1 = new ReflectPoint(3, 5);
                changStringValue(pt1);//练习变b为a
        } 
        
        private static void changStringValue(Object obj) throws Exception {
        Field[] fields = obj.getClass().getFields();//得到所有字段
        //进行迭代
        for(Field field : fields){
            //这里是比较字节码用‘==’ 比 ,当然用equals也行但是显得不专业了
            //这边的目的是先筛选出String类型的字节码对象
            if(field.getType() == String.class){
                //通过Field类的get方法获得指定的对象的成员的值
                String oldValue = (String)field.get(obj);              
                String newValue = oldValue.replace('b', 'a');//对每个进行替换
                field.set(obj, newValue);//还要再把新的赋给它
            }
                
        }
    }      
}


---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值