A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liqi 中级黑马   /  2014-8-9 11:51  /  791 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看反射,晕了一天,终于有点眉目
RfelectPoint pt1 = new ReflectPoint(3,5);
Field fieldY= pt1.getClass().getField("y");
fieldY.get(pt1);

Method methodCharAt = String.class.getMethod("charAt",int.class);
System.out.println(methodCharAt.invoke(str1,4));

都是两步:
1 通过 类.class  对象.getClass  Class.forName(类名)   这三种方法得到Class类型字节码的对象
      这个对象调用getField、getMethod等方法得到属性,方法等的字节码对象。
这一步是用来得到属性,方法,构造函数等的字节码对象。
(有个容易让人晕的地方是: 用 对象.getClass得到Class类型字节码的对象,如: pt1.getClass(),在第二步ieldY.get(pt1);传入对象pt1时,让人误以为已经知道对象了,为什么又一次传入这个对象。
这是因为  对象.getClass   这里的对象是类的任意的对象,都可以得到Class类型字节码的对象。得到字节码对象后就和这个对象无关了,得到的这个对象类的属性,方法,构造函数等信息)
2  第一步得到的是类属性,方法等的字节码对象;
  fieldY.get(pt1); 第二步传入哪个对象,得到的就是哪个对象的属性
   methodCharAt.invoke(str1,4);传入哪个对象,得到的就是该对象的方法;
反射就是找到类,属性,方法,构造函数等的字节码对象,然后传入所需的对象,那就就得到该对象的特有属性,特有方法,特有构造函数

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马