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方法

  • 相关阅读:
    VS 2008潜在强大的功能:提取EXE文件中的ICO等资源
    园友们注意:淘宝网上QQ会员 4钻 3元 等都为骗子行为
    Comet Async Process Request Handler
    WCF(Sender) to MSMQ to WCF(Receiver)
    ASP.NET Web Form GridView DetailsView Query Edit
    WCF NetTcp AsyncQueue Service
    Xml CDATA 序列化
    Sync Invoke Remoting Async Invoke
    .Net 4.0 Remoting ConcurrentQueue
    Socket Async Receive Data to LinkedList Buffer (telnet proxy server)
  • 原文地址:https://www.cnblogs.com/xiaoyunxiao/p/2412026.html
Copyright © 2011-2022 走看看