黑马程序员技术交流社区

标题: 成员变量和静态成员变量的反射 [打印本页]

作者: Morgan    时间: 2015-7-5 16:55
标题: 成员变量和静态成员变量的反射
本帖最后由 Morgan 于 2015-7-5 17:03 编辑

1.类中的字段也就是成员变量,类中的成员变量也是用一个类来表示的,它就是Field类。
2.Class中的getField(String  fieldName)方法用来获取到类中的字段,字段可以是静态的也可以是非静态的,但是这个方法不能获取到被private修饰的字段。如果要获取到被private修饰的字段要用getDeclaredFiled(String  fieldName)方法。
3.得到字段Field类型的对象后。Field类中的方法get(Object obj)可以获取到obj对象上这个字段的值。如果字段是静态的就给这个方法传入null。对于私有的字段这个方法还是会抛出异常,所以在get之前首先要设置字段为可获取,通过Field的setAccessible(true)方法。
4.请看下面代码片段。
  1. public class Point
  2. {
  3.         private int x;
  4.         public int y;
  5.         public static int z=24;

  6.         public Point(int x, int y)
  7.         {
  8.                 super();
  9.                 this.x = x;
  10.                 this.y = y;
  11.         }
  12. }
复制代码
  1. Point p = new Point(3, 5);
  2.             Field fieldy= p.getClass().getField("y");
  3.             System.out.println(fieldy.get(p));//5
  4.             System.out.println("----------I am split line.-----------");
  5.             Field fieldx= p.getClass().getDeclaredField("x");
  6.             fieldx.setAccessible(true);
  7.             System.out.println(fieldx.get(p));//3
  8.             System.out.println("----------I am split line.-----------");
  9.             Field fieldz=p.getClass().getField("z");
  10.             System.out.println(fieldz.get(null));//24
复制代码





作者: 如初见    时间: 2015-7-5 17:48
谢谢楼主 学习了!




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