黑马程序员技术交流社区
标题:
反射
[打印本页]
作者:
liqi
时间:
2014-8-9 11:51
标题:
反射
看反射,晕了一天,终于有点眉目
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);传入哪个对象,得到的就是该对象的方法;
反射就是找到类,属性,方法,构造函数等的字节码对象,然后传入所需的对象,那就就得到该对象的特有属性,特有方法,特有构造函数
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2