反射:运行时的类信息

RTTI如果想要知道某个对象的类型信息,这个类型在编译时必须已知,这样才能使用RTTI识别它。

假设你获取了一个指向某个并不在你的编程空间中的对象的引用,在编译时你的程序根本没法获知这个对象所属的类(假设从磁盘文件或者网络连接中获取了一串字节代表一个类)。

反射提供了一种机制:用来检查可用的方法,并返回方法名。

人们想要在运行时获取类的信息的另一个动机,是希望提供在跨网络的远程平台上创建和运行对象的能力,这被称为RMI(远程方法调用),它允许一个java程序将对象分布到多台机器上。

Class类和java.lang.reflect类库一起对反射的概念进行了支持。

反射机制没有什么神奇之处:当通过反射与一个未知类型的对象打交道时,JVM只是简单的检查这个对象,看它属于哪个特定的类(就像RTTI那样)。在用它做别的事情之前必须先将那个类的Class对象加载进来。因此,那个类的.class文件对于JVM来说必须是可获得的,要么在本机上,要么可以通过网络取得。

所以RTTI和反射之间真正的区别在于:对于RTTI,编译器在编译时打开和检查.class文件;对于反射,.class文件在编译时是不可获取的,所以在运行时打开和检查.class文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值