反射

作者: X荔枝 | 来源:发表于2017-10-09 19:39 被阅读0次

    反射

    class


    获取class字节码对象的三种方式:

    //1、通过类.class


                 Class clazz=Hero.class;


    //2、通过对象.getClass();


                 Hero h=new Hero();

                 Class class1=h.getClass();


    //3、通过Class.forName()

                 Class class2=Class.forName("类名");


    Constructor

    概念:对构造函数进行封装


    //通过无参构造函数,创建一个新的实例对象

    Object obj=clazz.newInstance();//相当于调用new

    //通过参数个数和类型类确定调用哪个构造函数

    Constructor constructor=clazz.getConstructor(String.class);//调用有参构造函数,并且传递参数值Objectobj=constructor.newInstance("郭靖");//相当于调用new


    Field

    概念:对类中的属性进行封装


    Field[] fields1=clazz.getFields();//获取public修饰的属性

    Field[] fields2=clazz.getDeclaredFields();//获取所有申明的属性

    Field field=clazz.getField("name");//获取public修饰的name属性

    Field field2=clazz.getDeclaredField("name");//获取申明过的name属性

    field2.setAccessible(true);//设置为可以访问的

    field.getModifiers();//获取修饰符

    field.getType();//获取类型

    field2.set(obj,"lisi");//给属性赋值


    内省


    Object obj=Hero.class.newInstance();

    PropertyDescriptor pd=new PropertyDescriptor("name",Hero.class);//获取Heror中的name属性描述器

    Method method=pd.getWriteMethod();//获取该属性的set方法

    method.invoke(obj,"lisi");//调用set方法

    相关文章

      网友评论

          本文标题:反射

          本文链接:https://www.haomeiwen.com/subject/fvbiextx.html