Java SE --- 反射机制

来源:互联网 发布:数组占几个字节 编辑:程序博客网 时间:2024/05/17 20:22

一、什么是反射:

反射的概念由smith1982年提出,只要是指程序可以访问、检测和修改它本身状态或行为的一种能力。最先被程序设计语言领域采用,现在也应用到了操作系统和文件系统中。

在计算机科学领域,反射是指一类应用,它们能够自描述和子控制。也就是这类事物通过某种机制实现对自己行为的描述和检测,并跟进自身行为状态和结果,调整和修改应用所描述行为的状态和相关语义。

二、什么事Java中得反射机制:

ReflectionJava的特征之一,它允许运行中Java程序对自身进行检查,并能直接操作程序的内部属性和方法。这种动态获取信息和动态调用对象行为的功能成为反射机制。

三、Java反射所用的的类:

Field类:提供有关类和接口的单个字段信息,以及对它的动态访问权限。

Method类:提供关于类或接口上单独某个方法的信息。

Constructor类:提供关于类的单个构造方法的信息以及对它的访问权限。

Class类:类的实例表示正在运行的 Java 应用程序中的类和接口。

四、Java反射机制的作用:

Java中,反射是一种强大的工具。它能够创建灵活的的代码,这些代码可以在装入时装配,无需组建之间进行源代表链接。允许我们在编写执行时,使我们的程序代码能够直接装载到JVM中得类的内部信息,而不是源代码中选定的类协作代码。

1、能够在运行时判断任意一个对象所属的类;

2、能够在运行时构造任意一个类的对象;

3、能够在运行时哦按段任意一个类所具有的成员变量和方法;

4、能够在运行时调用任意一个对象的方法。

五、Java反射机制类的方法:

Class类:

getDeclaredConstructor(Class<?>...parameterTypes):返回类全部构造器方法

getDeclaredMethod(String name, Class<?>...paremeter):返回类全部方法

getDeclaredFields():返回类全部属性

getInterfaces():返回类实现的全部接口

创建对象的方法:

使用newInstance()方法创建对象类实例,调用默认构造器。

先用class对象获取Constructor对象,再调用constructor对象newInstance() 建该class对象的实例。

Meghod类:

invoke(Object obj, Object...args):调用方法,obj是执行方法的主调,args为参数。

调用方法:

获得某个class类对象,通过getMethods()方法获取指定方法,通过该Method 来调用invoke就可以执行对象方法。

Field类:

getXxx(Object obj):获取obj对象的field

setXxx(Object objXxx val):将obj对象的该field值设置为bal值。

六、反射机制例子:

七、反射机制的缺点:

(1)用于字段和方法接入时反射要远慢于直接代码。性能问题的程 度取决于程 序中是如何使用反射的。如果它作为程序运行中相对很少涉及的部分,缓慢的 性能将不会是一个问题。即使测试中最坏情况下的计时图显示的反射操作只耗 用几微秒。仅反射在性能关键的应用的核心逻辑中使用时性能问题才变得至关重 要。

(2)许多应用中更严重的一个缺点是使用反射会模糊程序内部实际要发生的事 情。程序人员希望在源代码中看到程序的逻辑,反射等绕过了源代码的技术会带来 维护问 题。反射代码比相应的直接代码更复杂,正如性能比较的代码实例中看到 的一样。解决这些问题的最佳方案是保守地使用反射——仅在它可以真正增加灵活 性的地方 ——记录其在目标类中的使用。 

原创粉丝点击