反射
通过反射,我们可以在运行的时候就动态的获取对象的类,方法等信息,而不用事先在编译器或者写代码的时候告诉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一个类,他用来缓存各种各种的派生类和类名。