zoukankan      html  css  js  c++  java
  • 第十二章 执行期别辩识

    一、描述(如何辩识型别)

    1. 传统的RTTI(run-time type identification,执行期型别辨识)机制,它假设你在编译期和执行期拥有所有型别信息
    2. reflection机制,允许你在执行期间找出和class相关的信息

    二、为什么需要RTTI

    1. 多态
    2. 在执行期找出对象的型别

    三、Class对象

    1. 每个class都有一个Class对象。
    2. 执行期间当你想要产生该class对象时,Java虚拟机会先检查该型别的Class对象是否已经被装载,如果尚未装载,JVM会根据名称找到.class文件并装载它。
    3. 装载的是Class对象
    4. 一旦某个型别的Class对象被装载内存,它就可以用来产生改型别的所有对象
    5. Class.forName("className");返回的是className相关联的Class对象,调用该方法会导致className的初始化(必须拥有无参构造方法(null构造方法))。该方法等同于:className.class;(外覆类[Boolean,Long等]都有一个名为TYPE的标准数据,用以产生一个与之相对应的Class对象)。
    6. 总之产生Class对象的reference之后,便可对其进行相关操作(有关具体操作可查看Class类源码或查看文档)

    package soul.test.ch_12;
    class Test {
    static{
    System.out.println("This is static !");
    }
    Test(){
    System.out.println("This is Test() !");
    }
    }
    //测试类
    class Test_2 {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
    Object o=Class.forName("soul.test.ch_12.Test").newInstance();
    }
    }
    //print:
    //This is static !
    //This is Test() !

    四、instanceof

    1. 只能它来比较具名型别,不能比较Class对象
    2. instanceof(isInstanceof)所表示的意义在于:“你就是这个class吗?或是其子类吗?”
    3. 使用==比较两个Class对象时:“正好就是这个型别吗”

    五、总结

    这里简单的对了解一下反射机制,以后用到时再系统的学习一下。
  • 相关阅读:
    linux C++类中成员变量和函数的使用
    使用linux backtrace打印出错函数堆栈信息
    R String 操作
    make
    *.efasta to fasta format transformation
    python os 库
    Ch12 Resampling statistics and bootstrapping
    Updating an R installation
    10 步让你成为更优秀的程序员
    Working with large datasets
  • 原文地址:https://www.cnblogs.com/realsoul/p/5762226.html
Copyright © 2011-2022 走看看