java 反射 机制的作用,java反射机制的作用与优点

java的反射机制就是增添程序的天真性,制止将程序写死到代码里,

例如: 实例化一个 person()工具, 不使用反射, new person(); 若是想酿成 实例化 其他类, 那么必须修改源代码,并重新编译。

使用反射: class.forName("person").newInstance(); 而且这个类形貌可以写到配置文件中,如 **.xml, 这样若是想实例化其他类,只要修改配置文件的"类形貌"就可以了,不需要重新修改代码并编译。

反射实在就是程序能够自检查自身信息。就像程序会照镜子反光看自己。

在程序中可以检查某个类中的方式属性等信息,而且能够动态挪用。

这样可以写出很天真的程序。

好比要把一个工具中的数据copy到另外一个工具中,规则是属性名相同就copy,

就可以用反射来做,不需要指定每个属性的名字,只要动态从类中取得信息,

再判断属性名是否相同即可。固然应用另有许多。

反射可以连系Java的字节码,使用ASM和cglib等库,还能动态天生类。

hibernate的延迟载入,spring的AOP都是这么实现的

反射给Java带来了一些动态性。不外虽然很好,但毕竟照样有一定局限性的。另外ASM,cglib使用照样不放便。因此一些纯动态语言现在是一个主要发展趋势,好比ruby,python等,程序很容易动态天生。

增添程序的天真性。

如struts中。请求的派发控制。

当请求来到时。struts通过查询配置文件。找到该请求对应的action。已经方式。

然后通过反射实例化action。并挪用响应method。

若是不适用反射,那么你就只能写死到代码里了。

所以说,一个天真,一个不天真。

很少情形下是非用反射不能的。大多数情形下反射是为了提高程序的天真性。

因此一样平常框架中使用较多。由于框架要适用更多的情形。对天真性要求较高。

一、什么是反射:

反射的观点是由Smith在1982年首次提出的,主要是指程序可以接见、检测和修改它自己状态或行为的一种能力。这一观点的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所接纳,并在Lisp和面向工具方面取得了成就。其中LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。

反射自己并不是一个新观点,只管计算机科学赋予了反射观点新的寄义。在计算机科学领域,反射是指一类应用,它们能够自形貌和自控制。也就是说,这类应用通过接纳某种机制来实现对自己行为的形貌(self-representation)和监测(examination),并能凭据自身行为的状态和效果,调整或修改应用所形貌行为的状态和相关的语义。

二、什么是Java中的类反射:

Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性和方式。Java 的这一能力在现实应用中用得不是许多,但是在其它的程序设计语言中基本就不存在这一特征。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数界说相关的信息。

Reflection 是 Java 被视为动态(或准动态)语言的要害,允许程序于执行期 Reflection APIs 取得任何已知名称之 class 的內部信息,包罗 package、type parameters、superclass、implemented interfaces、inner classes, outer class, fields、constructors、methods、modifiers,並可于执行期天生instances、调换 fields 內容或唤起 methods。

三、Java类反射中所必须的类:

Java的类反射所需要的类并不多,它们分别是:Field、Constructor、Method、Class、Object,下面我将对这些类做一个简朴的说明。

Field类:提供有关类或接口的属性的信息,以及对它的动态接见权限。反射的字段可能是一个类(静态)属性或实例属性,简朴的明白可以把它看成一个封装反射类的属性的类。

Constructor类:提供关于类的单个组织方式的信息以及对它的接见权限。这个类和Field类差别,Field类封装了反射类的属性,而Constructor类则封装了反射类的组织方式。

Method类:提供关于类或接口上单独某个方式的信息。所反映的方式可能是类方式或实例方式(包罗抽象方式)。 这个类不难明白,它是用来封装反射类方式的一个类。

Class类:类的实例示意正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 工具的一个类,所有具有相同元素类型和维数的数组都共享该 Class 工具。

Object类:每个类都使用 Object 作为超类。所有工具(包罗数组)都实现这个类的方式。

原文链接:https://www.cnblogs.com/huhewei/p/12906319.html

本站声明:网站内容来源于网络,若有侵权,请联系我们,我们将及时处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值