RTTI与反射

3 篇文章 0 订阅
1 篇文章 0 订阅

        近日读 thinking in java,读到类型信息这一章。

        起初,对RTTI(Run Time Type Identification 通过运行时类型信息程序能够使用基类指针或引用来检查这些指针或引用所指的对象的实际派生类型)很是疑惑,如果只看英文,和说中提到的“在运行是识别对象和类型的信息”表达的是一个意思,那为何又说“Java 让我们在运行是识别对象和类型信息,主要有两种方式:RTTI、反射”?难道不是RTTI包含反射?

       答案是不是,针对RTTI 主要针对通过调用父类来访问实际的子类。它确实是在运行是才知道实际运用的是父类还是子类的成员,这就是所谓的运行时别对象类型。

      而反射,也是一种在运行时识别对象的类型。

     而二者的区别在于 文中也提到“RTTI 有一个限制,这个类型在编译是必须是已知的”。也就是说,无论是父类还是子类,到底是什么类型,在运行是决定,但是编译期间就会检查父类、子类是否存在,父类、子类之间是否可以转换,即文中“对RTTI来说,编译器在编译时打开和检查.class文件”。而反射则不会,即使是一个没有的类,如Class.forName("Constants"),在编译期间也不会发现Constants类没有,即文中“对反射机制来说,.class 文件在编译时是不可获取的,所以实在运行时打开和检查的”。

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值