reflect Java的反射机制是怎样的

技术reflect Java的反射机制是怎样的reflect Java的反射机制是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、类型识别的两种方式

对于reflect Java的反射机制,相信很多没有经验的人都无能为力。因此,本文总结了问题产生的原因及解决方法。希望你能通过这篇文章解决这个问题。

一、类型识别的两种方式:

首先,“运行时类型识别”(rtti)主要有两种方式。

* * *物种:我们已经知道编译时和运行时的所有类型。

其次,我们在整个项目中编译模块,并在运行时动态编译新添加的模块。(在动态编译模块之前,编译代码的类型是未知的。)这就是要被接受的强大“反射”机制。

二、认识“Class对象”:

要理解Java中RTTI (Runtime Type Recognition)的工作原理,我们必须首先知道类型信息在运行时是如何表达的。这项工作由“类对象”完成,它包含与类相关的信息。

类是程序的重要组成部分(类的属性、方法以及它的一些特性,我在这里就不重复了。),每个类都有一个Class对象。每当编写和编译一个新类时,都会生成一个类对象,该类对象将保存在一个. class文件中,该文件与您创建的新类同名。然后当程序运行时,当我们想要生成这个类的对象(实例化这个类)时,运行这个程序的Java虚拟机(JVM)会这样做:

首先,它将加载。创新类的类文件,

然后确认这个新类的类对象是否已经加载。如果没有,JVM会找到。类文件并加载它。一旦这个类的类对象被加载到内存中,它将被用来创建这个类的所有对象。

一般RTTI表格包括三种类型:

1.传统类型转换。例如,“(苹果)水果”,RTTI保证类型转换的正确性。如果执行了不正确的类型转换,将引发ClassCastException异常。

2.通过类对象获取对象的类型。诸如

[code=' Java ']Class c=Class . for name(" Apple ");

对象o=c . NewInstance();

3.通过关键字instanceof或Class.isInstance()确定对象是否属于特定类型的实例。确切地说,instanceof/Class.isInstance()可用于确定对象是否属于特定类及其所有基类的实例,这不同于equals()/==。它们用于比较两个对象是否属于同一个类的实例,而不考虑继承。

三、反射

如果你不知道一个对象的类型,你可以通过RTTI得到它,但前提是编译时必须知道类型,这样你就可以用RTTI来识别它。也就是说,在编译时,编译器必须知道RTTI处理的所有类。

反射机制可以不受此限制使用,主要应用于两种情况:

* * *案例是“基于组件的编程”,其中将使用一些基于快速应用程序开发(RAD)的应用程序构建工具来构建项目。这是目前最常见的可视化编程方法,通过将代表不同组件的图标拖动到画板上,然后设置“组件”(components)的属性值来配置它们以创建程序。为了实现这种配置编程,有必要要求所有组件都是可实例化的,并公开其部分信息,以便程序员可以读取和设置组件的值和状态。在处理GUI时间工件时,还必须公开相关方法的事件处理细节,这样RAD环境可以帮助程序员覆盖这些处理事件的方法。这里,反射机制用于检查可用的方法并返回方法实体对象。基于组件的编程架构是通过JavaBeans提供的。

在第二种情况下,在运行时获取类信息的另一个动机是提供跨网络在远程平台上创建和运行对象的能力。这被称为远程调用(RMI),它允许一个Java程序在多台机器上步进对象。这种循序渐进的能力将帮助开发人员执行需要大量计算的任务,充分利用计算机资源,提高运行速度。

类支持反射,反射包括java.lang.reflect中的Field/Method/Constructor类,每个类都实现了Member接口。这些类型的对象由JVM在运行时创建,以表示未知类中的相应成员。例如,您可以使用构造函数类创建一个新对象,使用get()和set()方法读取和修改与字段对象关联的字段,并使用invoke()方法调用与方法对象关联的方法。同时,还可以调用getFields()、getMethods()、getConstructors()等方法,返回表示字段、方法和构造函数的对象数组。这样就可以在运行时完全确定未知对象的类信息,在编译时不需要知道任何信息。

此外,RTTI有时还能解决效率问题。当程序中使用多态性时,会给程序的运行带来负担。可以用RTTI写一段代码来提高效率。

看完以上,你掌握了reflect Java的反射机制了吗?如果您想学习更多技能或了解更多相关内容,请关注行业资讯频道。感谢阅读!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/44643.html

(0)

相关推荐

  • 二阶段提交在MySQL中的广义应用是怎样的

    技术二阶段提交在MySQL中的广义应用是怎样的本篇文章给大家分享的是有关二阶段提交在MySQL中的广义应用是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看

    攻略 2021年10月25日
  • keka解压后怎么安装不了软件了(keka解压软件安装说明)

    技术Keka for Mac压缩解压工具怎么用今天就跟大家聊聊有关Keka for Mac压缩解压工具怎么用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Keka

    攻略 2021年12月24日
  • mysql中转换函数以及排序问题的示例分析

    技术mysql中转换函数以及排序问题的示例分析这篇文章主要为大家展示了“mysql中转换函数以及排序问题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中转

    攻略 2021年11月6日
  • Disruptor中锁对性能有什么影响

    技术Disruptor中锁对性能有什么影响本篇文章给大家分享的是有关Disruptor中锁对性能有什么影响,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Di

    攻略 2021年10月21日
  • sparksql查询优化的基本流程(spark调优参数)

    技术spark作业调优的方法是什么这篇文章主要讲解了“spark作业调优的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“spark作业调优的方法是什么”吧!调优

    2021年12月14日
  • 数据库中常见术语有哪些

    技术数据库中常见术语有哪些这篇文章将为大家详细讲解有关数据库中常见术语有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Access数据库中有一些常见的术语,下面是小编

    攻略 2021年11月23日