反射概述
静态语言VS动态语言:
反射的功能:
反射机制与封装是否矛盾?两个技术如何看待?
不矛盾。
封装性体现在标记为公共的方法也许是可以用到的,建议去调用。私有的方法不建议使用。
通过直接new的方式和反射的方式都可以调用公共的结构,用哪个?
在程序运行时才知道要造哪个类的对象,体现动态性,使用反射。
关于Java.lang.Class的理解
获取class的实例有四种方法:
对于数组来说,只要元素类型和维度一致,class类就是同一个,即
int[] a = new int[10];
int[] b = new int[100];
System.out.println(a.getClass()==b.getClass());
以上代码返回True。
读取properties配置文件
创建运行时类的对象
**反射的动态性:**编译时不确定要创建的是哪个类的对象,只有在运行时才能确定创建哪个类的对象,如
只有在运行时才知道随机数的值,从而确定要创建哪个类的对象。
获取运行时类的完整结构
调用运行时类中的指定结构
属性
方法
调用静态方法:
invoke()中可以填null,因为showDesc是通过clazz找到的。
构造器
动态代理
静态代理举例:
被代理类和代理类在编译期间已经确定,因此称之为静态代理。
动态代理举例:
在Invoke()方法中写目标方法的动作。