zoukankan      html  css  js  c++  java
  • 第十四章:类型信息

    运行时类型信息使得你可以在程序运行时发现和使用类型信息。

    1. Java是如何让我们在运行时识别对象和类的信息的。

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

    当从数组中取出元素时,这种容器—实际上它将所有的事物都当作Object持有——会自动将结果转型回Shape。这是RTTI最基本的使用形式,因为在Java中,所有的类型转换都是在运行时进行正确性检查的。这也是RTTI名字的含义:在运行时,识别一个对象的类型。

    所有的类都是在对其第一次使用时,动态加载到JVM中的。当程序创建第一个对类的静态成员的引用时,就会加载这个类。这个证明构造器也是类的静态方法,即使在构造器之前并没有使用static关键字。因此,使用new操作符创建类的新对象也会被当作对类的静态成员的引用。

    2.对Class对象的引用的方法:

    1.)使用Class.forName(“name”)可获得恰当的Class对象的引用。

    2.)调用getClass()方法来获取Class引用。

    3.)使用类字面常量:类似于:name.class,并且不会自动地初始化该Class对象。

    3.为了使用类而做的准备工作实际包含三个步骤:

    1.)加载,这是由类加载器执行的。该步骤将查找字节码,并从这些字节码中创建一个Class对象。

    2.)链接,在链接阶段将验证类中的字节码,为静态域分配存储空间,并且如果必需的话,将解析这个类创建的对其他类的所有引用。

    3.)初始化。如果该类具有超类,则对其初始化,执行静态初始化器和静态初始化块。初始化被延迟到了对静态方法(构造器隐式地是静态的)或者非常数静态域进行首次引用时才执行。

    4.RTTI形式包括:

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

    2.)代表对象的类型的Class对象。通过查询Class对象可以获取运行时所需的信息。

    3.)关键字instanceof。它返回一个布尔值,告诉我们对象是不是某个特定类型的实例

  • 相关阅读:
    Text Link Ads 注册[赚钱一]
    Linux文件系统中的链接
    C++虚函数和纯虚函数(1)
    Android init reading tips
    Android上GDB的使用
    What is prelink?
    Linux fork哪些被继承,哪些不被继承
    为什么x86 Linux程序起始地址是从0x08048000开始的?
    Android应用开发的插件化 模块化
    C++拷贝构造函数(深拷贝、浅拷贝)
  • 原文地址:https://www.cnblogs.com/xiaobaidashu/p/12288480.html
Copyright © 2011-2022 走看看