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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值