RTTI、反射、动态代理部分知识总结

来源:互联网 发布:淘宝帐号永久冻结解封 编辑:程序博客网 时间:2024/06/07 18:18

RTTI与反射

  背景:为什么会需要反射机制?

  众所周知,RTTI(运行时类型识别),可以确切的告诉你某一个对象的确切类型,但有一个前提,这个确切类型必须在编译阶段是已知的。

  即在编译时,编译器必须知道所有要通过RTTI处理的类,如果当前是处在一个分布式的环境中,某一台主机接收到了一段字节流信息,而这个字节流信息代表着的是一个确切类型的对象,此时本地没有对应该类型的.class文件,则RTTI无法有效识别该对象的确切类型。

  因此引入了反射机制。反射机制可以在本地不存在.class文件的情况下,识别对象的确切类型,其中包括具体的对象信息,如属性(getFields())、方法(getMethods())、构造器(getConstructors())等。

  当通过反射与一个未知类型的对象打交道时,JVM只是简单的检查这个对象,确认它属于哪个特定的类(就像RTTI那样)。在用它做其他事情之前,必须先加载那个类的Class对象。因此,那个类的.class文件对于JVM来说,必须是可以获取到的:要么来自本地,要么来自于网络。
  

  所以RTTI与反射真正的区别在于:

 - 对于RTTI来说,编译器在编译时打开和检查.class文件(换句话说,我们可以用“普通”方式调用对象的所有方法) - 对于反射机制来说,.class文件在编译阶段是不可获得的,所以是在运行阶段打开和检查.class文件(这种情况多数是因为该类的.class文件来自于网络)。

  在远程方法调用(RMI)中、某些RPC框架中,反射机制最为常见,它允许将Java对象分布到多台机器上,提高系统的并行能力。反射机制应运而生。
  (关键字:分布式系统、RPC、RMI)
  

  动态代理

(待整理)

原创粉丝点击