黑马程序员_基础加强之反射

  ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

  1、通过反射得到Date类中的getTime方法

   Calendar calendar = Calendar.getInstance();
   在此建立了一个Calendar(日历)类的对象

  <span style="font-size:14px;">Method getTimeMethod = Calendar.class.getMethod("getTime", null);//通过反射的方式得到字节码对象里的方法
  System.out.println(getTimeMethod.invoke(calendar, null));;//调用calendar对象的getTime方法</span>
     如以上代码所示,我通过反射方式 得到了Calendar类的getTime方法,然后让calendar这个对象去调用,结果,我取到了系统当前时间。至此,引出张孝祥老师在视频中讲的一句很经典的话:反射,其实就是将一个类中的各种成分映射成对应的java类。

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

      先给出要用来反射的类,我的目的是将字符串成员的值中的字符‘ l’替换成‘ k’

      

public class ReflectPoint {
	private int x;
	public int y
	//将下面的各个字符冲的l替换成k。方法在ReflectTest3中
        public String str1 = "table tenis";
	public String str2 = "bubble";
	public String str3 = "bboadcaslyt";
	
	//Alt+Shift+S,单击Generate Constructor using Fields。通过这种方法,自动生成构造函数
	public ReflectPoint(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}

}
      下面的代码就是,我怎样利用反射,取到ReflectPoint中的成员,找到String类型的成员,并将成员的值替换为‘k’

public class ReflectTest3 {
	public static void main(String[] args) throws Exception {
		ReflectPoint point = new ReflectPoint(7,8);
		changeStrValue(point);
	}
	
	private static void changeStrValue(Object obj) throws Exception {
		Field[] fields = obj.getClass().getFields();//获得所有的字段
		//用增强的for循环迭代
		for(Field field : fields){
			//用==比较字节码,用equals不专业,尽管它是可以的
			//筛选出String类型的字节码
			if(field.getType()==String.class){
				//通过Field类的get方法获得指定对象的String类型成员的值
				String oldValue = (String)field.get(obj);
				String newValue = oldValue.replace('l','k');//每个成员的值中的‘l’都替换成‘k’
				field.set(obj, newValue);//再把新值赋给field
			}
		}
	}
	
}

       
                /*
		 * 通过反射方式,获得ArrayList的无参构造函数
		 */
		Constructor constructor = Class.forName("java.util.ArrayList").getConstructor();
		//建立ArrayList的对象
		List list = (ArrayList)constructor.newInstance();
		System.out.println(list);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值