看反射,晕了一天,终于有点眉目
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);传入哪个对象,得到的就是该对象的方法;
反射就是找到类,属性,方法,构造函数等的字节码对象,然后传入所需的对象,那就就得到该对象的特有属性,特有方法,特有构造函数 |
|