黑马程序员技术交流社区

标题: 反射的个人总结 [打印本页]

作者: mandoooo    时间: 2015-11-17 20:01
标题: 反射的个人总结
什么是反射?
通过类,可以得到当前类的fields,method,construtor等,可以通过类实例化一个实例,设置属性,唤醒方法。

类反射的包及核心类?
java.lang.Class
java.lang.refrection.Method
java.lang.refrection.Field
java.lang.refrection.Constructor

得到Class的三个过程是?
对象.getClass();
类.class
Class.forName("类名");

Constructor 类:代表某个类的一个构造方法

(A)得到某个类所有的构造方法
   Constructor[] con=Class.forName(“Java.lang.String”).getConstructor();
(B)得到某一个构造方法:
   Constructor con=Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);
(C)例:String str=new String(new StringBuffer("abc"));
   用反射:Constructor con=String.class.getConstructor(StringBuffer.class);
           String str=(String)con.newInstance(new StringBuffer("abc"));

Constructor<T> Class.getConstructor(Class<?>... parameterTypes): 返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法
T Constructor.newInstance(Object... initargs):



Field类:代表某个类中的成员变量

例子:
Class ReflectPiont
{
        public int y;
        private int x;
        ReflectPoint(int y,int x){
        This.y=y;
                  This.x=x;
}
}
Class FieldDemo
{
        public static void main(String[] args){
        ReflectPoint rp=new ReflectPoint();
        Field y=rp.getClass().getField(“y”);
        System.out.println(y.get(rp));

        Field x=rp.getClass().getField(“x”)
                  x.setAccessible(true);
                  System.out.println(x.get(rp));
}
}

Field Class.getField(String name): 返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
Object Field.get(Object obj): 返回指定对象上此 Field 表示的字段的值。
void Field.set(Object obj, Object value): 将指定对象变量上此 Field 对象表示的字段设置为指定的新值。


Method类:代表某一个类中一个成员方法
(A)得到类中的某一个方法
      Method m=Class.forName(“Java.lang.String”).getMethod(“charAt”,int.class);
(B)通常方法:System.out.println(str.charAt(1));
     反射方法:Method m=str.getClass().getMethod(“charAt”,int.class);
                  m.invoke(str,1);

Method Class.getMethod(String name, Class<?>... parameterTypes): 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
Object Method.invoke(Object obj, Object... args): 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。





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