A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mandoooo 中级黑马   /  2015-11-17 20:01  /  599 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是反射?
通过类,可以得到当前类的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 对象表示的底层方法。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马