zoukankan      html  css  js  c++  java
  • 谈谈Java中的类型识别RTTI

    很多新手在学习编程的时候看到好多书上都有什么RTTI的一点讲解,觉得很重要但是自己一般好像又用不到,所以就放一边去了,这种学习的态度不好啊,原理性的东西要好好学习啊!!
    1.什么是RTTI??
     RTTI是运行时类型识别的简写(run-time type identification).
    RTTI可以在有一个指向基类对象的引用时,让你找出这个对象的确切类型.
    2.谈谈Class对象
     程序运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型识别。这象信息记录了每个对象所属的类。用来保存这些信息的类是Class类.
    每个类都有一个Class对象,也就是说每当编译了一个新类时就会产生一个Class对象(被保存在同名的.class文件中),在运行时,如果需要生成这个类的对象时候(注意是需要),Java虚拟机(JVM)就会根据类名查找.class文件,并将其载入,所以Java程序并不是一开始执行就被完全加载的。
    一旦某个类的Class对象被载入内存,它就被用来创建这个类的所有对象.
    示例程序:
    package MyJava.Base;
    class Student
    //静态块在类第一次被加载的时候执行
     static 
     { 
      System.out.println("Loading Student");
     }
    }
    class Teacher

     static 
     { 
      System.out.println("Loading Teacher");
     }
    }
    class Coder

     static 
     { 
      System.out.println("Loading Coder");
     }
    }
    public class RTTIDemo

     public static void main(String[] args) throws Exception
     { 
      System.out.println("Inside main");
      new Student();
      System.out.println("After creating Student");
      try
      { 
       Class.forName("Teacher");
      }catch(Exception ex)
      { 
       System.out.println(ex);
      }
      System.out.println("After Class.forname(Teacher)");
      
      new Coder();
      System.out.println("After creating Coder");
      
      
     
     
     }
    }
     
    3.类型转换前的检查
    Java中有"类型安全的向下转型",什么叫类型安全的向下转型呢???
    就是转换前使用instanceof关键字判断后再转换,否则会有异常产生,
     
    当系统中类的程序中关系比较复杂时需要用instanceof来判断类型,维持秩序,
    不过有可能尽量使用多态了!!
     
    4.获得Class类对象的方法

    a)         Class cl = e.getClass();

    b)        String className = “JFrame”;

    Class cl = Class.forName(className);

    c)        Class cl = JFrame.class;

    注意:Class对象实际上描述的只是类型,而这类型未必是类,如:int不是类,int.class是一个Class类型的对象

     

    5.利用Class对象生成同类型的实例:

    Object m = Class.forName(“JFrame”).newInstance();

    newInstance方法使用默认构造器初始化新建对象,如果需要以名称创建的类的构造器提供参数,就必须使用Constructor类中的newInstance方法

  • 相关阅读:
    ActiveReports 报表应用教程 (3)---图表报表
    ActiveReports 报表应用教程 (4)---分栏报表
    ActiveReports 报表应用教程 (5)---解密电子商务领域首张电子发票的诞生(套打报表)
    hdu4467 Graph
    ActiveReports 报表应用教程 (6)---分组报表
    [leetcode]Search a 2D Matrix
    参加百度开放云编程马拉松后一点总结
    CAS服务器配置
    Tomcat 的 SSL 配置
    在windows server 2008 R2 64bit上面配置PI OPC Server的DCOM
  • 原文地址:https://www.cnblogs.com/xiaoyunxiao/p/2412026.html
Copyright © 2011-2022 走看看