1.RTTI的工作原理

例1. 用Class加载对象示例。

package RTTI;

public class Candy {
static{
System.out.println("Loading Candy in static block.");
}
public static void main(String[] args) {
System.out.println("Loading Candy in main method."); } }
package RTTI;

public class loadClass {

    public static void main(String[] args) {
System.out.println("Before loading Candy.");
try {
Class.forName("Candy");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }

2. 使用getClass()方法获取类信息

例2. getClass()方法使用示例。

package RTTI;

public class Shape {
void showMsg(){
System.out.println("This is Shape class.");
}
}
package RTTI;

public class Circle extends Shape {
void showMsg(){
System.out.println("This is Circle class.");
}
}
package RTTI;

public class getClassName {

    public static void showName(Shape shape){
Class c1 = shape.getClass();
System.out.println(c1.getName());
if(c1.getName().equals("RTTI.Shape"))
System.out.println("This is a shape object.");
else if(c1.getName().equals("RTTI.Circle"))
System.out.println("This is a circle object.");
}
public static void main(String[] args) {
showName(new Circle());
showName(new Shape()); } }

程序的输出结果为:

RTTI.Circle
This is a circle object.
RTTI.Shape
This is a shape object.

3. 使用类标记

java提供了一种简便生成Class对象的方法:类标记。如果T是任意的java类型,那么,T.class就代表匹配的类对象。例如:

Class c1 = int.class;
Class c2 = double[].class;
Class c3 = Shape.class;

例3. 类标记使用示例

package RTTI;

public class getClassName {

    public static void showName(Shape shape){
Class c1 = shape.getClass();
System.out.println(c1.getName());
// if(c1.getName().equals("RTTI.Shape"))
if(c1==Shape.class)
System.out.println("This is a shape object.");
// else if(c1.getName().equals("RTTI.Circle"))
else if(c1==Circle.class)
System.out.println("This is a circle object.");
}
public static void main(String[] args) {
showName(new Circle());
showName(new Shape()); } }

4. 使用关键字instanceof判断所属类

java提供了一个关键字instanceof,用于帮助程序员判断一个对象真正所属的类。它是一个二元运算符,一般形式如下:

objectName instanceof className

计算结果为true或false。

例4. 使用instanceof判断所属类。

package RTTI;

public class getClassName {

    public static void showName(Shape shape){
Class c1 = shape.getClass();
System.out.println(c1.getName());
// if(c1.getName().equals("RTTI.Shape"))
// if(c1==Shape.class)
if(shape instanceof Circle)
System.out.println("This is a circle object.");
// else if(c1.getName().equals("RTTI.Circle"))
// else if(c1==Circle.class)
else if(shape instanceof Shape)
System.out.println("This is a shape object.");
}
public static void main(String[] args) {
showName(new Circle());
showName(new Shape()); } }

运行时类型识别RTTI的更多相关文章

  1. C++学习之显式类型转换与运行时类型识别RTTI

    static_cast const_cast reinterpret_cast 运行时类型识别(RTTI) dynamic_cast 哪种情况下dynamic_cast和static_cast使用的情 ...

  2. c++运行时类型识别(rtti)

    一个简单运行时类型识别 namespace rtti_ex { /* * 类型信息基类 */ class i_type_info { public: // 判断是否是指定类型 bool is(cons ...

  3. C++之运行时类型识别RTTI

     C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...

  4. C++——运行时类型识别RTTI

    1.实现方式 typeid运算符,返回表达式的类型 dynamic_cast运算符,基类的指针或引用安全地转换成派生类的指针或引用 2.适用于:使用基类的指针或引用执行派生类的操作,且该操作不是虚函数 ...

  5. Java基础之RTTI 运行时类型识别

    运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息. 多态(polymorphism)是基于R ...

  6. RTTI 运行时类型识别 及异常处理

    RTTI   运行时类型识别 typeid  ------  dynamic_cast dynamic_cast 注意事项: 1.只能应用于指针和引用之间的转化 2.要转换的类型中必须包含虚函数 3. ...

  7. RTTI (Run-Time Type Identification,通过运行时类型识别) 转

    参考一: RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型.   RTTI提供了以下两个 ...

  8. MFC六大核心机制之二:运行时类型识别(RTTI)

    上一节讲的是MFC六大核心机制之一:MFC程序的初始化,本节继续讲解MFC六大核心机制之二:运行时类型识别(RTTI). typeid运算子 运行时类型识别(RTTI)即是程序执行过程中知道某个对象属 ...

  9. 框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解)

    框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解) 一丶什么是RTTI,以及RTTI怎么设计 通过第一讲,我们知道了怎么样升成一个窗口了,以及简单的消息循环. 第二讲则是主要讲解RTTI ...

随机推荐

  1. Java访问者模式

    结构对象会遍历它自己所保存的聚集中的所有节点,在本系统中就是节点NodeA和NodeB.首先NodeA会被访问到,这个访问是由以下的操作组成的: (1)NodeA对象的接受方法accept()被调用, ...

  2. bzoj 1820 dp

    最普通dp要4维,因为肯定有一个在上一个的位置,所以可以变为3维,然后滚动数组优化一下. #include<bits/stdc++.h> #define LL long long #def ...

  3. shell如何向python传递参数,shell如何接受python的返回值

    1.shell如何向python传递参数 shell脚本 python $sendmailCommandPath $optDate python脚本 lastDateFormat = sys.argv ...

  4. 使用 AVA 做自动化测试

    http://colabug.com/710736.html

  5. api设计 - php 接口 token 数据加密

    最近在用php写app的接口,有一些疑问 首先关于token(令牌)token是用户登录的时候生成的 用户token在服务端保存入库 客户端则缓存在本地 大部分接口都要求客户端发送token 和服务端 ...

  6. 谷歌pagerank算法简介

    在这篇博客中我们讨论一下谷歌pagerank算法.这是参考的原博客连接:http://blog.jobbole.com/71431/ PageRank的Page可是认为是网页,表示网页排名,也可以认为 ...

  7. java 代码中设置 临时 环境变量

    System.setProperty("hadoop.home.dir", "D:\\software\\software_install\\dev_install\\h ...

  8. JFinal 3.3 学习 -- JFinalConfig (配置web项目)

    开篇  概述 基于JFinal的web项目需要创建一个继承自JFinalConfig类的子类,该类用于对整个web项目进行配置. JFinalConfig子类需要实现六个抽象方法,如下所示: publ ...

  9. ASP.net 简单分页的实现

    在自己的项目中有一个文章的管理页面需要用到分页, 这种分页方法是在黑马的一个视频中看到的,便用在了自己的项目中. 但是使用控件实在是太丑,虽然我写的也丑....... gridview 控件提供的分页 ...

  10. android 消息机制,handler机制,messageQueue,looper

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha handler  就是 处理器 .  用来处理消息, 发送消息. handler   就 ...