zoukankan      html  css  js  c++  java
  • RTTI和反射

    JAVA 运行时识别对象和类的信息,主要有两种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型;另一种是"反射"机制,它允许我们在运行时发现和使用类的信息。

    参考文章:RTTI和反射

    RTTI

    RTTI(Run-Time Type Identification)运行时类型检查。

    传统的RTTI,假设我们在编译期和运行期已经知道了所有的类型。表现在以下几个方面:

            ① Class对象是RTTI的核心,每个类都有一个Class对象
            ② instanceof 关键字,用于检查对象是不是某个特定类型的实例
          ③ 强制类型转换
    多态(polymorphism)是基于RTTI实现的。RTTI的功能主要是由Class类实现的。
    参考文章: Java进阶04 RTTI

    反射

      如果你不知道一个对象的确定类型,RTTI可以告诉你。但是有个限制:这个类型在编译期间必须已知,才能使用RTTI来识别它。例如,在磁盘上或者网络中的一段字符串,被告知代表一个类,但是编译器在编译代码的时候,并不知道,怎么才能使用这个类呢?这时候就需要使用反射。

        通过反射与未知类型的对象打交道时,JVM只是简单地检查这个对象,看它属于哪个特定的类(与RTTI一样)。但在这之后,在做其它事情之前,必须加载那个类的 Class 对象。因此,那个类的.class 文件对于 JVM 来说必须是可获取的,要么在本地机器上,要么可以通过网络取得。 

    区别

    参考文章:Java RTTI和反射的区别?

        RTTI:编译器在编译期间打开和检查.class文件

        反射:编译器在运行期间打开和检查.class文件

  • 相关阅读:
    第四周学习进度总结
    SOA面向服务的架构
    MVC架构模式
    大型网站技术架构阅读笔记01
    Python爬虫出错
    修改安卓的gradle地址后出现cannot resolve symbol ......错误
    一线架构师阅读笔记03
    周进度报告(十)
    周进度报告(九)
    一线架构师阅读笔记02
  • 原文地址:https://www.cnblogs.com/xiaoduc-org/p/5957992.html
Copyright © 2011-2022 走看看