19.10.26

//1.反射
Java的反射是指一个程序运行期间可以拿到一个对象的所有信息
这种通过Class实例获取class信息的方法称为反射(Reflection)。
获得实例的三种方法:
<1>直接通过一个class的静态变量class获得
Class cls = String.class;
<2>如果有一个实例变量,可以通过实例变量的getClass()获得
String s = "Hello";
Class cls = s.getClass();
<3>如果知道一个class的完整类名,可以通过静态方法Class.forName()获得
Class cls = Class.forName("java.lang.String");

因为Class实例在JVM中是唯一的,所以上述方法获取的Class实例时同一个实例;
可以使用==来进行比较

Class实例比较和instanceof的差别
用instanceof不但匹配当前的类型,还可以匹配类型的子类。
而用==判断class实例可以精确地判断数据类型,但不能作子类型比较。
通过Class.newInstance()可以创建类实例,它的局限是:
只能调用public的无参数构造方法。带参数的构造方法,
或者非public的构造方法都无法通过Class.newInstance()被调用

动态加载
JVM在执行Java程序的时候,并不是一次性把所有用到的class全部加载到内存中
而是第一次用到是才加载
JVM总是动态加载class,可以在运行期根据条件来控制加载class。

猜你喜欢

转载自www.cnblogs.com/tsruixi/p/11767913.html