2013-05-14 59 views

回答

7

术语“RTTI”是一个特定于C++的术语,指的是核心语言的功能,它允许程序在运行时确定各种对象的动态类型。它通常是指dynamic_casttypeid运营商,以及typeid生产的相关std::type_info对象。

另一方面,术语“反射”是跨编程语言使用的通用术语,指的是程序在运行时检查和修改其对象,类型等的能力。

我听说应用于instanceof术语是type introspectioninstanceof有时也被称为对象自省,因为程序被允许查看正在运行的类型来决定采取什么样的行动。我认为这是一个比反思更弱的术语,因为它不允许对对象的字段或方法进行详细的反思,但我认为调用instanceof运算符反射的用法不会在技术上不正确。

至于你的其他问题 - 如何在运行时加载类信息? - 这真的取决于JVM的实现。类型最终负责将类加载到系统中,但JVM可以解释它,但它想要的。我曾经在JavaScript中构建过一个原型JVM,并且在内部,所有反射调用都只是查询了代表类,字段和方法的底层JS数据结构。我可以想象HotSpot JVM会做一些完全不同的事情,但它几乎是实现定义的。

希望这会有所帮助!

+0

谢谢!不知何故,我在我的Java课程中了解了RTTI,这可能是为什么我感到困惑:S – godlamp

2

简而言之,RTTI和反射之间的真正区别在于,使用RTTI时,编译器会在编译时打开并检查.class文件。使用反射,.class文件在编译时不可用;它由运行时环境打开并检查。

0

因此,RTTI和反射之间的真正区别在于,RTTI编译器会在编译时打开并检查.class文件。换句话说,你可以用“正常”的方式调用一个对象的所有方法。使用反射,.class文件在编译时不可用;它由运行时环境打开并检查。 (с)