Java程序中的对象在运行时可以表现为两种类型,即编译时类型和运行时类型(在多态阶段时即编译看左边,运行看右边)。反射存在即最根本意义即java类在编译阶段需要调用运行时类型的方法,有两种情况
·①在编译和运行阶段都知道对象类型的基本信息时,可以直接先通过instanceof判断该类型是否可以转换,然后进行强制类型转换,此种类型不需要运用反射
②在编译阶段根本无法知晓操作对象的类型,但又要调用操作对象的运行时方法,程序只依靠运行时信息来发现该对象和类的真实信息,这时就只能用反射。
通过反射,我们能获取以下内容:
- 程序运行时,可以通过反射获得任意一个类的Class对象,并通过这个对象查看这个类的信息;
- 程序运行时,可以通过反射创建任意一个类的实例,并访问该实例的成员;
- 程序运行时,可以通过反射机制生成一个类的动态代理类或动态代理对象。