我的问题是类信息在运行时何时加载?
当有人调用 instanceof
时,这算是 RTTI 还是反射?还是视实际情况而定?
最佳答案
术语“RTTI”是一个特定于 C++ 的术语,指的是允许程序在运行时确定各种对象的动态类型的核心语言的功能。它通常是指 dynamic_cast
或 typeid
运算符,以及由 typeid
生成的相关联的 std::type_info
对象.
另一方面,术语反射是跨编程语言使用的通用术语,指的是程序在运行时检查和修改其对象、类型等的能力。
我听说应用于 instanceof
的术语是 type introspection 和 instanceof
有时被称为对象内省(introspection),因为允许程序查看正在运行的类型以确定要采取的操作过程。我认为这是一个比反射更弱的术语,因为它不允许对对象的字段或方法进行详细的内省(introspection),但我认为调用 instanceof< 的使用在技术上是不正确的
运算符反射。
关于您的另一个问题 - 类信息如何在运行时加载? - 这真的取决于 JVM 实现。 ClassLoader
类型最终负责将类加载到系统中,但 JVM 可以根据需要对其进行解释。我曾经用 JavaScript 构建了一个 JVM 原型(prototype),在内部所有反射调用只是查询我已经准备好的底层 JS 数据结构来表示类、字段和方法。我想 HotSpot JVM 会做一些完全不同的事情,但它几乎是实现定义的。
希望这对您有所帮助!
关于java - Java中RTTI和反射的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16553836/