Java有两种方式让我们在运行时识别对象和类的信息:1、“传统的”RTTI,假定所有的类型编译时已知;2、“反射”机制,允许在运行时发现和使用类的信息。

一、RTTI

RTTI(Run-Time Type Infomation),在运行时识别一个对象的信息。RTTI的形式有三种:

1、传统的类型转换

  如“Shape s=(Shape) new Circle()”,由RTTI确保类型转换的正确性,如果执行了一个错误的类型转换,就会抛出一个ClassCastException异常。

2、代表对象的类型的Class对象

  Class对象包含了与类有关的信息,每个类都有一个Class对象,每当编写并编译一个新类,就会产生一个Class对象(被保存在一个同名的.class文件中)。

  无论何时,要想在运行时使用类型信息,就必须首先获取对恰当的Class对象的引用。有以下几种方式可获取:

  • Class.forName(),不需要为获取Class引用而持有该类型的对象;
  • obj.getClass(),类Object方法,返回对象实际类型的Class引用;
  • Shape.class,类字面量,编译时检查,当使用“.class”来创建对Class对象的引用时,不会自动地初始化Class对象。

3、instanceof或者isInstance()

  考虑了继承,表示“是否这个类,或者是否这个类的派生类”。

二、反射

Class类和java.lang.reflect类库一起对反射的概念进行了支持。该类库包含了Filed、Method和Constructor类(每个类都实现了Member接口),这些类型的对象是由JVM在运行创建的,用以表示未知类里对应的成员。

主要的一些方法:getFileds()、getMethods()、getConstructors()和invoke()。

RTTI和反射的主要区别:对RTTI,编译器在编译时打开和检查.class文件;对反射,在运行时打开和检查.class文件。

RTTI和反射小结的更多相关文章

  1. Java系列笔记(2) - Java RTTI和反射机制

    目录 前言 传统的RTTI 反射 反射的实现方式 反射的性能 反射与设计模式 前言 并不是所有的Class都能在编译时明确,因此在某些情况下需要在运行时再发现和确定类型信息(比如:基于构建编程,),这 ...

  2. 【Java基础】RTTI与反射之Java

    一.引言 很多时候我们的程序可能需要在运行时识别对象和类的信息,比如多态就是基于运行时环境进行动态判断实际引用的对象.在运行时识别对象和类的信息主要有两种方式:1.RTTI,具体是Class对象,它假 ...

  3. java之RTTI和反射的理解

    最近在读 Thinking in Java 这本书.读到类型信息这一张时,刚开始对书中所说的RTTI和反射彻底混了,不知道有什么联系,有哪些相同点和区别.于是在网上又找了些内容辅助理解,这一章又重新读 ...

  4. RTTI和反射

    JAVA 运行时识别对象和类的信息,主要有两种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型:另一种是"反射"机制,它允许我们在运行时发现和使用类的信息. 参考 ...

  5. 浅析Java RTTI 和 反射的概念

    一.概念: RTTI(Run-Time Type Identification,运行时类型识别)的含义就是在运行时识别一个对象的类型,其对应的类是Class对象,怎么理解这个Class对象呢?如果说类 ...

  6. QObject提供了QMetaObject元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化

    元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化其中元类又提供了:classInfo,className,构造函数, ...

  7. Java类型信息(RTTI和反射)

    要想在IT领域站得住脚,必须得不断地学习来强化自己,但是学过的技术不实践很容易便被遗忘,所以一直都打算开个博客,来记录自己学的知识,另外也可以分享给有需要的人! 最近在学习反射,为了更好地理解反射,就 ...

  8. 【JavaSE】运行时类型信息(RTTI、反射)

    运行时类型信息使得你可以在程序运行时发现和使用类型信息.--<Think in java 4th> **** 通常我们在面向对象的程序设计中我们经常使用多态特性使得大部分代码尽可能地少了解 ...

  9. Java RTTI和反射

    一.Java的RTTI  RTTI(Run-Time Type Identification,通过运行时类型识别)的含义就是在运行时识别一个对象的类型,其对应的类是Class对象,每个java里面的类 ...

随机推荐

  1. python基础--列表、元祖、字典、集合

    列表(List) 1.列表特点 列表是可变的!! list 是一种有序的序列,可以添加.删除其中的元素,并且可以通过下标(索引)访问 数据 2.简单的常用操作 A.通过下表访问元素 print(lis ...

  2. 着色器语言 GLSL (opengl-shader-language)入门大全

    基本类型: 类型 说明 void 空类型,即不返回任何值 bool 布尔类型 true,false int 带符号的整数 signed integer float 带符号的浮点数 floating s ...

  3. PAT 乙级 1089 狼人杀 && 1090 危险品装箱 (我的时间最短哦)

    1 1089的点在注释里面,核心就是遍历任意两个人说谎,看结果是否满足题目要求 2  1090 是一道好题目, 考虑到了时间复杂度 通常想法是看清单中每一个物品 是否存在与其不能存放的物品  那么复杂 ...

  4. 如何在Linux系统下挂载光盘

    工具/原料 Linux 方法/步骤   找到光盘的完整路径名.在命令行输入:ls -l /dev | grep cdrom. 可以看到光盘的名字叫做:cdrom1.然后在命令行执行: mount /d ...

  5. c——根据天数输出日期

    <c语言程序设计>(第三版)何钦铭 P190 #include<stdio.h> void month_day(int year,int yearday,int *pmonth ...

  6. pycharm 在线激活

    1.在pycharm过期页面选择 enter License 2.激活界面的License server输入:http://idea.liyang.io 然后点击激活  (确保电脑能上网,亲测有效)

  7. nginx里proxy_pass有无/的区别

    nginx在反向代理的时候,proxy_pass需要指定路径,有无"/"的区别,如下:   location /lile { 配置一: proxy_pass http://192. ...

  8. Day 11 函数对象,函数嵌套,作用域,闭包

    函数总结 # 函数的定义:def func(a, b):    print(a, b)    return a + b​​# 函数四个组成部分# 函数名:调用函数的依据,必须的# 函数体:执行函数逻辑 ...

  9. delphi字符串分割

    function GetLeft(sText, sepStr: string): string; var p: Integer; begin p := Pos(sepStr, sText); then ...

  10. 使用phpAnalysis打造PHP应用非侵入式性能分析器

    使用phpAnalysis打造PHP应用非侵入式性能分析器,查找PHP性能瓶颈. 什么是phpAnalysis phpAnalysis是一款轻量级非侵入式PHP应用性能分析器,适用于开发.测试及生产环 ...