千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:上海千锋IT培训  >  技术干货  >  Java RTTI和反射的区别?

Java RTTI和反射的区别?

来源:千锋教育
发布人:xqq
时间: 2023-10-20 17:38:06

一、Java RTTI和反射的区别

区别

对于RTTI来说,编译器在编译时打开和检查.class文件。而对于反射机制来说,.class文件在编译时是不获取的,所以是在运行时打开和检查.class文件。

当通过反射和一个未知的对象打交道时,JVM只是简单的检查这个对象,看他属于哪一个特定的类(就像RTTI),因此无论是使用RTTI还是反射机制,那个类的.class文件对与java虚拟机来说必须是可以获取的,要么是在本地磁盘空间或者是从网络资源上。

怎样理解RTTI

RTTI(Run-Time Type Infomation)又叫运行时类型信息。怎样才叫运行时类型信息呢?看文字我们可能很懵逼,但是在Java中你肯定知道多态(动态绑定,又叫运行时绑定),假如我们有一个基类A中有一个方法a(),子类B,C都继承了类A,并且重写了a()方法,各自输出自己的类型信息,但是我们并不想通过子类来实例化自己调用自己的方法,而是将创建子类的行为交给一个工厂(就好比现在有个printfInfo(A temp),参数为基类A定义的,方法里就是根据具体传进来的对象来调用那个对象的a()方法)。对于传入的实例化对象无论时B还是C,都会在调用printfInfo方法的时候向上转型(子类转化为基类)为A类型。这是RTTI最基本的使用形式,在Java中,所有的了类型转换都是在运行时进行正确性检查的。这也就是RTTI的含义:在运行时,识别一个对象的类型。

延伸阅读:

二、Class对象

Java中的每一个类都是一个Class对象,实际上我们定义类的时候不就是用Class关键字来定义的吗?我们知道Java文件在执行时会被javac编译成.class文件,即没有一个类就应当会有一个Class对象产生。而生成这个对象的机器就是由java虚拟机中的类加载器来加载的(启动类,扩展类,应用程序类,自定义类加载器)。所有的类都是在对其名列前茅次使用的时候动态加载到jvm中的。当程序调用一个类的静态成员时,类就会被加载(构造器就是一个类的静态方法)。类加载器首先会坚持这个类的Class对象是否已经加载。如果没有加载,那么默认的类加载器会去查找这个类的.class文件,在加载时会进行验证,查看是否含有不规范的代码(万一是黑客高手自己写的.class文件呢?)。一旦某个类的Class文件被放入内存,它就被用来创建这个来的所有对象。

以上就是关于Java RTTI和反射的区别的内容希望对大家有帮助。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

什么是ALM?

2023-10-20

实施 GRC 面临哪些挑战?

2023-10-20

灾难恢复为何如此重要?

2023-10-20

最新文章NEW

mybatis和hibernate的区别?

2023-10-20

java属性和方法有什么区别?

2023-10-20

java的jdk和jre有什么区别?

2023-10-20

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>