1、反射定义:在程序运行过程中,其他类可以看到并调用该类的方法和属性。
2、反射的优点:可以通过反射访问类的私有成员,在运行时能动态获取类的实例,可与动态编译结合
3、反射的缺点:使用反射性能较低,需要解析字节码,将内存中的对象进行解析。
4、通过class.ForName(类的全路径名)、对象.getClass()、类名.class获取类的Class对象
5、包括getMethod、getField、getClass、getConstructor四种反射API,生成JVM的类、方法、属性的信息
6、反射的使用步骤:
(1)通过Class.ForName("类的全路径名")获取类的Class对象
(2)利用class对象的getMethod方法创建method对象,getConstructor方法创建constructor对象
(3)调用constructor对象的newInstance方法创建反射类对象,调用method对象的invoke方法调用方法,其中invoke方法传入反射类对象和方法的实参。
7、反射的作用
通过类的全路径名获取类的class对象,在测试时通过反射访问类的私有成员,以保证测试准确。
如XML配置文件是通过反射机制被spring扫描到
8、反射机制的原理
(1)获取类的Class对象,包括获取classLoader,调用native方法,jvm回调classLoader进类加载
(2)通过newInstance方法创建反射类对象,包括权限检测、查找并缓存无参构造器、调用具体方法的无参构造方法并返回
(3)获取method对象,包括在缓存中查找是否有指定名称的method对象,若没有则抛出异常,如有则将该对象拷贝一份并返回。
(4)调用method对象的invoke方法