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

    Java有两种方式让我们在运行时识别对象和类的信息:1、“传统的”RTTI,假定所有的类型编译时已知;2、“反射”机制,允许在运行时发现和使用类的信息。

    一、RTTI

    RTTI(Run-Time Type Infomation),在运行时识别一个对象的信息。RTTI的形式有三种:

    1、传统的类型转换

      如“Shape s=(Shape) new Circle()”,由RTTI确保类型转换的正确性,如果执行了一个错误的类型转换,就会抛出一个ClassCastException异常。

    2、代表对象的类型的Class对象

      Class对象包含了与类有关的信息,每个类都有一个Class对象,每当编写并编译一个新类,就会产生一个Class对象(被保存在一个同名的.class文件中)。

      无论何时,要想在运行时使用类型信息,就必须首先获取对恰当的Class对象的引用。有以下几种方式可获取:

    • Class.forName(),不需要为获取Class引用而持有该类型的对象;
    • obj.getClass(),类Object方法,返回对象实际类型的Class引用;
    • Shape.class,类字面量,编译时检查,当使用“.class”来创建对Class对象的引用时,不会自动地初始化Class对象。

    3、instanceof或者isInstance()

      考虑了继承,表示“是否这个类,或者是否这个类的派生类”。

    二、反射

    Class类和java.lang.reflect类库一起对反射的概念进行了支持。该类库包含了Filed、Method和Constructor类(每个类都实现了Member接口),这些类型的对象是由JVM在运行创建的,用以表示未知类里对应的成员。

    主要的一些方法:getFileds()、getMethods()、getConstructors()和invoke()。

    RTTI和反射的主要区别:对RTTI,编译器在编译时打开和检查.class文件;对反射,在运行时打开和检查.class文件。

  • 相关阅读:
    CND库(Bootstrap 、React、Vue、Angular.js、JQuery)
    使用线性渐变实现滚动进度条
    设置鼠标光标样式
    百度地图API部分功能
    网页的三种布局(固定布局,流式布局,弹性布局)
    这一次带你彻底了解远程Cookie操作
    js获取各种高度和宽度
    点击按钮,回到页面顶部的5种写法
    Chrome默认字体大小
    CSS Grid 网格布局
  • 原文地址:https://www.cnblogs.com/aaron-shu/p/7429488.html
Copyright © 2011-2022 走看看