RTTI学习笔记

  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()。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值