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

  • 相关阅读:
    js 类对象
    图片自动轮播及点击图标切换图片
    js 常用方法
    js-案例 国家-省市-区域之间的三级联动
    JS 基础知识之传智播客2
    JS 基础知识之传智播客1
    div居中
    formatDate 格式化日期 ,给小于10的月日,加0,如01 02 03
    Radiobutton改成文字样式
    如何在Android平台下进行Socket通信
  • 原文地址:https://www.cnblogs.com/xiaoyunxiao/p/2412026.html
Copyright © 2020-2023  润新知