反射

反射

通过反射,我们可以在运行的时候就动态的获取对象的类,方法等信息,而不用事先在编译器或者写代码的时候告诉JVM这个对象是什么类的,就比如泛型。
反射的功能主要有:

  • 在运行时判断任意一个对象所属的类;
  • 在运行时判断任意一个类所具有的成员变量和方法;
  • 在运行时构造任意一个类的对象;
  • 在运行时调用任意一个对象的方法

java的反射操作主要是用到了java.lang.Class类和java.lang.reflect反射包下的类。
Class类是说有类的基类,在Class内,有一个Class方法,但是这个方法只要JVM能调用,除了ClassLoad外,还提供几种方法可以动态创建类,比如getClass(),class.forName();
就比如说forName()这个方法,他又调用了Reflection.getCallerClass(),然后返回一个传入值的对象的类。

        public static Class<?> forName(String className)
                throws ClassNotFoundException {
        Class<?> caller = Reflection.getCallerClass();
        return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
    }

在class中有一个ReflectionData一个类,他用来缓存各种各种的派生类和类名。

个人小站:http://jun10ng.work/ 拥抱变化,时刻斗争,走出舒适圈。
原文地址:https://www.cnblogs.com/Jun10ng/p/12449681.html