day5
1.RTTI
在运用多态时才有意义。每个类都有个Class对象用来判断自己的RTTI。
类加载器
所有的类在第一次加载时,也就是第一次调用类的静态成员,例如构造器,就会加载到JVM中。
加载器会查找类的.class文件,然后Class对象被加载到内存后,用来构建这个类的所有对象。
Class类的接口forName(String class)来取得一个类的对象的引用。
|
|
还可以通过类字面量来得到一个类的Class,这适用于所有基本数据类型。
int.class,double.class,void.class
用.class调用不会对一个未初始化的类初始化,另外,static final变量不需要初始化就可以调用。比如:
java中的通配符是?。
RTTI的形式:
我们用RTTI是为了对于一个接口或者基类,需要向下转换时,我们无法知道他是子类中的哪种。
传统类型转换,(Class)object.
通过instanceof,调用为 class instanceof target,这个表达式返回一个boolean,判断一个类是否是目标类,如果是的话可以强制向下转换。或者Class.isInstance(),可以不用写多个instanceof()。
2.反射
定义:RTTI的限制在于,要识别的对象类型必须在编译阶段已知,如果对象类型的.class文件在网络或者本地磁盘上,需要动态加载。