黑马程序员技术交流社区

标题: Field反射 [打印本页]

作者: 恩恩    时间: 2013-12-25 12:32
标题: Field反射
在学习Field反射的时候遇到了一个问题先看如下代码:
  1. public class ReflectTest {


  2. public static void main(String[] args) throws Exception{

  3. /*Constructor constructor1 = String.class.getConstructor(StringBuffer.class);
  4. String string2 = (String) constructor1.newInstance(new StringBuffer("abc")) ;
  5. System.out.println(string2.charAt(2));*/

  6. ReflectPoint pt1 = new ReflectPoint(4, 6) ;
  7. ReflectPoint pt2 = new ReflectPoint(5, 8) ;
  8. Field fieldX = pt1.getClass().getField("x") ;
  9. System.out.println(fieldX.get(pt1));
  10. System.out.println(fieldX.get(pt2));

  11. }
  12. }
复制代码
  1. public class ReflectPoint {
  2. public int x ;
  3. private int y ;
  4. public ReflectPoint(int x, int y) {
  5. super();
  6. this.x = x;
  7. this.y = y;
  8. }

  9. }
复制代码

上面的代码中,Field fieldX = pt1.getClass().getField("x") ;这句话不管使用pt1还是pt2获得都是整个类里面的所有的x这个成员变量,而不是pt1这个对象里面的成员变量4是吧?

作者: 776699    时间: 2013-12-25 13:19
ReflectPoint pt1 = new ReflectPoint(4, 6) ;  这里你给x成员变量赋值为 4, 所以是4,。
作者: 恩恩    时间: 2013-12-25 14:17
776699 发表于 2013-12-25 13:19
ReflectPoint pt1 = new ReflectPoint(4, 6) ;  这里你给x成员变量赋值为 4, 所以是4,。

这个我知道,我说的是fieldX,这个地方是不是只要它使用Field fieldX = pt1.getClass().getField("x") ;这个,那么不管是谁传递,都是整个类?
作者: 776699    时间: 2013-12-25 14:20
本帖最后由 776699 于 2013-12-25 17:47 编辑
恩恩 发表于 2013-12-25 14:17
这个我知道,我说的是fieldX,这个地方是不是只要它使用Field fieldX = pt1.getClass().getField("x") ; ...


不是,不管是p1,还是p2操作,  确切的说你是操作对象中的x!!   类是你抽象中的东西, 你没有给它赋值,为0。
作者: hel    时间: 2013-12-25 14:50
Field fieldX = pt1.getClass().getField("x") ;

其中Filed是一个类,这个类中是ReflectPoint 全部对象上的x的值

如:ReflectPoint pt1 = new ReflectPoint(4, 6) ;
       ReflectPoint pt2 = new ReflectPoint(5, 8) ;
pt1 上的值是4,pt2上的值是5,
所以filedx代表的是一类事物,而不是一个,
当我们想要获取一个的时候就  fieldX.get(pt1),fieldX.get(pt2)  
作者: 恩恩    时间: 2013-12-25 14:54
hel 发表于 2013-12-25 14:50
Field fieldX = pt1.getClass().getField("x") ;

其中Filed是一个类,这个类中是ReflectPoint 全部对象上 ...

懂了,谢谢,我就一直在想是不是这样呢。:P
作者: 恩恩    时间: 2013-12-25 14:55
776699 发表于 2013-12-25 14:20
是的,不管是p1,还是p2操作,  都是操作类里面的变量x!!!

哦哦,好的,谢谢。懂了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2