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

posted @ 2012-03-22 17:45  yunxiange  阅读(225)  评论(0编辑  收藏  举报