RTTI(Run-Time Type Identification),通过运行时类型信息程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。

RTTI提供了以下两个非常有用的操作符:
(1)typeid操作符,返回指针和引用所指的实际类型。
(2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用。

面向对象的编程语言,像C++,Java,delphi都提供了对RTTI的支持。

RTTI(Run-Time Type Identification,通过运行时类型识别)的含义就是在运行时识别一个对象的类型,其对应的类是Class对象,每个java里面的类都对应一个Class对象(在编写并且编译后),这个对象被保存在这个类的同名class文件里。
类加载器在类被第一次静态调用(比如一个静态方法,一个静态代码块或者new关键字调用构造器,注意contructors其实都是静态的)时会把那个对应的Class对象加载到内存中。

在Java运行时,RTTI维护类的相关信息。
多态(polymorphism)是基于RTTI实现的。
RTTI的功能主要是由Class类实现的。

Java中每个对象都有相应的Class类对象,因此,我们随时能通过Class对象知道某个对象“真正”所属的类。无论我们对引用进行怎样的类型转换,对象本身所对应的Class对象都是同一个。当我们通过某个引用调用方法时,Java总能找到正确的Class类中所定义的方法,并执行该Class类中的代码。由于Class对象的存在,Java不会因为类型的向上转换而迷失。这就是多态的原理。

RTTI形式:
(1)Class类的forName静态方法,Class.forName("classname with packagepath")返回一个对类的Class对象的引用;
(2)一种更安全的得到Class类的对象的方式是,使用类字面常量:classname.class;
(3)Java在RTTI中的第三种形式是最常见的,也就是instanceof关键字,该关键字的调用其实就是使用了Class对象,并且返回一个布尔值。如果说instanceof和Class的比较唯一的不同,那就是instanceof如果是其子类的对象也会返回true,而Class对象比较的会是确切的那个类型。

RTTI的限制?
就是它在编译时必须知道一个非常重要的东西:类名(甚至是全类名)

参考:
1. http://baike.baidu.com/link?url=X6OC4jkWMK4BFD6CbcvzEAylridoC_kcPRcymeCYQmL7735Elf13lDrMseWtxvl5q24dwvQZ_V-LyV3PCBF87_
2. http://www.cnblogs.com/vamei/archive/2013/04/14/3013985.html

转载于:https://www.cnblogs.com/fuyoucaoyu/articles/5689068.html

Java RTTI运行时类型识别相关推荐

  1. java 运行时类型_Java基础之RTTI 运行时类型识别

    运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息. 多态(polymorphism)是基于R ...

  2. 深入浅出MFC学习笔记:MFC六大关键技术仿真之RTTI运行时类型识别

    RTTI(运行时类型识别) 参考文献:深入浅出MFC-侯捷 怎样去构造类别型录网? 一.定义数据结构: 其中pFirstClass指针属于痊愈变量,所以它应该以static修饰之. 而且我们最终希望达 ...

  3. C++ 学习笔记之(19) new、delete表达式、RTTI(运行时类型识别)、枚举、类成员指针、嵌套类、局部类、位域、volatile、extern C

    C++ 学习笔记之(19) new.delete表达式.RTTI(运行时类型识别).枚举.类成员指针.嵌套类.局部类.位域.volatile.extern C C++ 学习笔记之(19) new.de ...

  4. java rtti_举例讲解Java的RTTI运行时类型识别机制

    1.RTTI:运行时类型信息可以让你在程序运行时发现和使用类型信息. 在Java中运行时识别对象和类的信息有两种方式:传统的RTTI,以及反射.下面就来说下RTTI. RTTI:在运行时,识别一个对象 ...

  5. 白话C++系列(27) -- RTTI:运行时类型识别

    http://www.cnblogs.com/kkdd-2013/p/5601783.html RTTI-运行时类型识别 RTTI:Run-Time Type Identification. 那么RT ...

  6. RTTI机制(运行时类型识别)

    RTTI机制(运行时类型识别) 在多态里面,基类里的虚函数和派生类里的虚函数形成了遮蔽,这就导致在主程序运行时,有些表达式的类型没有办法确定.必须等到程序运行结束后,根据具体的环境才能确定.看下面的代 ...

  7. MFC六大核心机制之二:运行时类型识别(RTTI)

    上一节讲的是MFC六大核心机制之一:MFC程序的初始化,本节继续讲解MFC六大核心机制之二:运行时类型识别(RTTI). typeid运算子 运行时类型识别(RTTI)即是程序执行过程中知道某个对象属 ...

  8. c++远征之多态篇——运行时类型识别(RTTI)

    以下内容源于慕课网的学习整理,如有侵权,请告知删除. 1.RTTI(Run-Time Type Information),运行时类型识别. 涉及typeid.dynamic_cast这两个知识点. R ...

  9. C++11 的 运行时类型识别type_info

    一.type_info与typeid 类type_info保存关于类型的特定于实现的信息,包括类型的名称,以及比较两个类型是否相等或排序顺序的方法. 这是typeid操作符返回的类.具有如下特点: ( ...

最新文章

  1. 低版本jdbc连接高版本oracle,转:oracle11g的JDBC连接 URL和之前的版本有一定的区别...
  2. leetcode前缀树java_LeetCode 实现 Trie (前缀树)
  3. 最佳的七十五个网络分析和安全工具
  4. 学习python 正则表达式——与你同行!
  5. 本地计算机上的mysql57_win10出现本地计算机上的MySQL57服务启动后停止
  6. 使用BIGMAP地图下载器,生成卫星地图
  7. [网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
  8. 关于Arduino连接L298N供电问题
  9. Android系统设置settings应用学习(二)--源代码解析
  10. tokenizer.encode、tokenizer.tokenize、tokenizer.encode_plus的用法差异
  11. linux驱动程序设计21 Linux设备驱动的调试
  12. 使用Intel NCS2 算力棒 安装部署记录Windows 10, Intel openvino_toolkit_p_2019.1.148
  13. 2018VR一体机VR眼镜哪个牌子好?大家都选了UGP VR眼镜,UGP VR一体机
  14. MDK5插件:代码格式整理、文件注释、函数注释
  15. JavaFx_JDK1.8 简单操作
  16. 规模较大的四大计算机互联网络,我国的四大互联网络是什么?
  17. 互联网迟到的80后 为什么中国出不了扎克伯格
  18. 建筑力学与结构【15】
  19. 绿盾终端申请解密,审批通过之后,右下角提示:解密失败,请手动下载解密文件
  20. C#LINQ在列表中查找重复项

热门文章

  1. 【android】两个按钮的宽度各占屏幕的一半
  2. Entity Framework 4.3 中的新特性
  3. iPhone开源系列:iDev Recipes
  4. javascript传值和页面跳转传值(ASP.NET页面传参的三种方法)
  5. 华为荣耀8青春版计算机在哪里,华为荣耀8青春版
  6. 多线程解决rospy.spin()语句之后,程序不再往下执行问题
  7. Verilog中关于case语句的优先级
  8. DSP unresolved symbol问题的解决
  9. lstm中文分词pytorch版本
  10. Cenos7 部署asp.net core站点