java 类型信息 笔记

RTTI : RTTI(Run-Time Type Information),经过运行时类型信息程序可以使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。java

java 使用CLass对象来执行RTTI,即便正在使用转型的操做.
全部的类都是在第一次对其使用时,动态加载到jvm中,当建立第一个对类的静态成员引用时,类被加载.
这个证实构造器也是静态方法,只是没有static关键字.所以,new关键字建立的对象也会被当作对类的静态成员的引用.数组

Class.forName:返回与给定的字符串名称相关联类或接口的Class对象。
Class.forName是一个静态方法,一样能够用来加载类。若是类尚未被加载就进行加载同时初始化类信息.markdown

forName这句话就是装载类用的(new是根据加载到内存中的类建立一个实例,要分清楚)。
Class的newInstance方法是实现”虚拟构造器”的一种方式.虚拟构造器容许你声明”我不知道你的类型,可是能够正确的建立你本身”.newInstance调用的是无参构造方法,没有则会报出异常.jvm

java 类字面常量 : 例如 A.clalss 做用 : 生成对Class对象的引用.能够用于普通类还能够用于接口,数组,基本类型. 字面常量对Class对象的引用不会自动初始化Class对象.spa

类的加载三步骤 :
1.加载 : 类加载器加载.class文件,并经过字节码生成Class对象
2.连接 : 在连接阶段验证类中的字节码,为静态域分配存储空间,若是必须的话,解析这个类对其余类的全部引用
3.初始化 : 若是该类具备超类,则对其进行初始化,而且执行静态初始化器和静态初始化块.指针

在使用字面量常量时,若是一个值是static final”编译期常量”.不须要对改类初始化就可读取,若是只是static和final之一,会先初始化后进行读取.也就是说只是static不是final,那么对它的访问老是先连接,初始化该类再后才能读取.
因此字符串常量应该尽可能写成static finalcode

Class引用老是指向某一个Class对象,它能够制做类的实例,并包含可做用于该实例的全部方法代码,包括静态成员.
Class引用表示的就是它所指向的对象的确切类型,而该对象即是Class类的一个对象.orm

Class<?>因为Class,几遍他们是等价的.Class<?>能够帮助进行类型检查。对象

Class.cast()用于类型转换 :
参数为要转型的对象,并 将其转为Class的引用类型
示例 :接口

class A {}
class B extends A {}

A a = new A();
CLass<B> classB = B.Class;
B b = classB.cast(a);
相关文章
相关标签/搜索