RTTI学习笔记

来源:互联网 发布:变声器玩游戏知乎 编辑:程序博客网 时间:2024/06/01 10:12
  1. RTTI is short for RunTime Type Information 。
  2. 三种方式
    A.class
    a.getClass()
    Class.forName(A)
  3. Class.forName(A),A要有完整的包名。
  4. Class的NewInstance()方法需要类有默认构造器。
  5. 建议使用.class的方式获取Class对象,简单,安全(编译时进行类型检查),高效(减少了方法调用)。
  6. 准备使用一个类的三步:
    1. 加载。ClassLoader将类的字节码加载到虚拟机然后创建class对象;
    2. 链接。为static field分配内存,解决对其他class的引用;
    3. 初始化,先父类,先静态。
  7. 引用静态方法(包括构造器,因为默认时静态的)或者静态成员变量(实际上应该是编译时常量)时触发初始化,但是如果静态常量(final static)不是编译时常量也会触发静态初始化。如

    class A{final static a=10;//使用a不触发A的静态初始化final static aa=Random.nextInt();//使用aa会使A静态初始化static{//静态块}}
  8. 泛型不支持协变和逆变,但是能实现协变和逆变,通过< ? extends A>和< ? super A>。
  9. 加了泛型的class在调用newInstance()的时候会返回精确类型二不是Object,但是< ? super A>依然返回Object,因为编译器无法推导出你要的是第几级父类。
  10. a.getSuperclass()返回的Class不能用A的直接父类引用,因为编译器不知道是第几级父类,同理该用Class< ? super A>。
  11. A.class.cast(a)等价于(A)a。
  12. a instanceof A。
  13. facede设计模式为一个复杂子系统提供一个简单接口。Façade模式注重简化接口,Adapter模式注重转换接口,Bridge模式注重分离接口(抽象)与其实现,Decorator模式注重稳定接口的前提下为对象扩展功能。
  14. instanceof/i是Instance():是否是该类或者该类的父类(的父类的…);==/equals():是否是该类。
  15. 不管你怎么努力,反射总有办法调用类中的方法:包括但不限于callHiddenMethod(),invoke()。
原创粉丝点击