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. win10字体大小设置

    有时图形化界面不能正常显示,需要改变字体大小来查看 更改字体大小: 更改字体:

  2. GPL、BSD和Apache开源许可证

    参考资料 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) 如何选择开源许可证? - 阮一峰的网络日志 开源许可证教程 - 阮一峰的网络日志 简介 自由软件许可证由FSF(Free ...

  3. button元素的id与onclick的函数名字相同 导致方法失效的问题

    需求需要在原先页面添加一个按钮,触发一个function,如此简单的操作,却无意间发现了一个问题.(还是对html了解的太少) 先看下在菜鸟教程的示例(错误代码) <!DOCTYPE html& ...

  4. <泛> STL - stack 模拟实现

    今天,看C++Template的时候看到那人写了一个Stack,于是乎,手痒,自己也写了一个,在拜读了STD文件和C++模板元编程某些小节之后,你们就看到了这篇代码. 经过上述一番经历之后,我重新写了 ...

  5. Ace-editor 输入内容时光标闪动,定位错乱的解决方案

    请尝试将字体设置成12PX或者14px(偶数),避免设置成13px. 应该就可以解决. 同时向大家推荐一款可直接生成文档的API调试.管理工具(中文PostMAN):https://www.apipo ...

  6. socket--多进程,多线程服务器

    一:概念: 我们知道IP地址是标志网络中不用主机的IP地址,而端口号就是同一台主机上标志不同进程的地址,IP地址和端口号标志网络中的唯一地址.(又称socket) 在TCP协议中,建⽴立连接的两个进程 ...

  7. BZOJ 3963 HDU3842 [WF2011]MachineWorks cdq分治 斜率优化 dp

    http://acm.hdu.edu.cn/showproblem.php?pid=3842 写的check函数里写的<但是应该是<=,调了一下午,我是个zz. 就是普通的斜率优化因为有两 ...

  8. PHP7新特性 What will be in PHP 7/PHPNG

    本文结合php官网和鸟哥相关文章总结: 官网:http://www.php7.ca/   https://wiki.php.net/phpng PHP7将在2015年10月正式发布,PHP7 ,将会是 ...

  9. 【对比分析五】CSS阻塞和JS阻塞

    js 的阻塞特性: 所有浏览器在下载 JS 的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等.直到 JS 下载.解析.执行完毕后才开始继续并行下载其他资源并呈现内容.为了提高用户体验,新 ...

  10. Codeforces Round #228 (Div. 1) C. Fox and Card Game 博弈

    C. Fox and Card Game 题目连接: http://codeforces.com/contest/388/problem/C Description Fox Ciel is playi ...