Java:源码分析—反射(实例化对象:newInstance)

今天我们来通过源代码,看看Java中反射是如何工作的。

反射,其实在我们日常的编程过程中可能用的并不多,但是第三方的库,这个技术确实应用非常广泛的,包括我们在开发Android应用时,有时为了操作一些不开放的系统属性时,也会用到反射。

这里我们将通过分析反射的运行,来看看Class这个类的功能。开始之前,先提到两个静态的整型变量,在java.lang.reflect.Member中。这两个变量后面会经常提到。

    /**
     * 所有的public成员,包括继承关系和接口
     */
    public static final int PUBLIC = 0;

    /**
     * 所有访问级别的成员,不包括继承(父类、子类)及接口
     */
    public static final int DECLARED = 1;

再看几个属性,在内部类ReflectionData中,保存着一些反射获取的方法、字段等信息集合。

//存放自己的所有字段,不包括继承关系的
volatile Field[] declaredFields;
//存放包括继承关系的public的字段
volatile Field[] publicFields;
//存放自己的,不包括继承关系的方法
volatile Method[] declaredMethods;
//存放包括继承关系的public的方法
volatile Method[] publicMethods;
//自己的,不包括继承关系的构造函数
volatile Constructor<T>[] declaredConstructors;
//包括继承关系的public的构造函数
volatile Constructor<T>[] publicConstructors;
// public and declared
volatile Field[] declaredPublicFields;
volatil

猜你喜欢

转载自blog.csdn.net/bdmh/article/details/103885039