黑马日记第十篇——反射

---------------------- andorid培训 、java培训、期待与您交流!----------------------

一、Class类
Class代表一份字节码对象,如:Class cls = 字节码;
得到字节码对象的三种方式:
1,类名.class。如:System.class。
2,对象.getClass()。如:new Data().getClass()。
3,Class.forName("类名")。如:Class.forName("java.util.Data")。
二、反射
反射就是吧Java类中的各种成分映射成相应的java类。(使用反射会导致性能下降)
1,ConsTructor类
该类用于等到某个类的构造方法。
得到某类的所有构造方法:
例:Constructor[] constructor= Class.forName("java.lang.String").getConstuctors();
得到某类的某一个构造方法:
例:Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);
调用构造方法:
newInstance(initargs);
2,Field类
表示某类或借口的字段的信息。通过Class类的getField方法或getDeclareField方法可以获取该对象。
例题:
将任意一个对象中的所有String类型成员变量所对应的字符串内容的“b”改为“a”。
public void changeStringValue(Object obj) throws Exception
{
  Field[] fileds = obj.getClass().getFields();
  for(Filed field : fields)
  {
    if(field.getType()==String.class)//注意:字节码之间比较相等使用“==”,规范。
    {
      String oldValue = (String)field.get(obj);
      String newValue = oldValue.replace('b','a');
      field.set(obj,newValue);
    }
  }
}
3,Method类
代表某个类中的成员方法。
通过Class类中的getMethod方法获取,格式如下:
getMethod(name,parameterType);
实例:
Method methodCharAt = String.class.getMethod("charAt",int.class);
methodCharAt.invoke(str,args);
上述实例中getMethod方法的两个参数为方法名和方法对应参数的字节码,其中invoke方法为调用方法。
注:jdk1.4与1.5中invoke方法区别:因为1.5出现了可变参数的概念,所以二者在invoke方法的描述上如下:
1.4:public Object invoke(Object obj,Object[] args)
1.5:public Object invoke(Object obj,Object...args)
所以如果使用1.4的格式改写实例中方法为:charAt.invoke("str",new Object[]{1});
---------------------- android培训 、java培训、期待与您交流!----------------------

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值