JAVA------反射

java 小课堂

分享人:常雷雷

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

反射主要是指程序可以访问,检测和修改它本身状态或行为,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义的一种能力。

反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;

这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。可以说类中有什么信息,就可以利用反射机制获得什么信息。

反射机制,能够使我们很方便的创建灵活的代码,

这些代码可以在运行时装配,而无需在组件之间进行源代码链接。在java中是一种非常强大的功能。

但是反射使用不当会影响到程序的性能。

2.知识剖析

反射是框架设计的灵魂

要正确使用Java反射机制就得使用java.lang.Class类。它是Java反射机制的起源。

Class提供了四个public方法,用于获取类的构造方法。

Constructor getConstructor(Class[] params)

根据构造函数的参数,返回一个具体的具有public属性的构造函数

Constructor getConstructors()

返回所有具有public属性的构造函数数组

Constructor getDeclaredConstructor(Class[] params)

根据构造函数的参数,返回一个具体的构造函数(不分public和非public属性)

Constructor getDeclaredConstructors()

返回该类中所有的构造函数数组(不分public和非public属性)

四种获取成员方法的方法

Method getMethod(String name, Class[] params)

根据方法名和参数,返回一个具体的具有public属性的方法

Method[] getMethods()

返回所有具有public属性的方法数组

Method getDeclaredMethod(String name, Class[] params)

根据方法名和参数,返回一个具体的方法(不分public和非public属性)

Method[] getDeclaredMethods()

返回该类中的所有的方法数组(不分public和非public属性)

四种获取成员属性的方法

Field getField(String name)

根据变量名,返回一个具体的具有public属性的成员变量

Field[] getFields()

返回具有public属性的成员变量的数组

Field getDeclaredField(String name)

根据变量名,返回一个成员变量(不分public和非public属性)

Field[] getDelcaredField()

返回所有成员变量组成的数组(不分public和非public属性)

3.常见问题

1.反射的优缺点?

4.解决方案

优点:

1、反射提高了程序的灵活性和扩展性。

2、降低耦合性,提高自适应能力。

3、它允许程序创建和控制任何类的对象,无需提前硬编码目标类。

缺点:

1、性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。

因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。

2、使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。

5.编码实战

让我们来看看这个例子的代码。

6.扩展思考

反射创建对象比直接创建对象慢,为什么还要使用反射?

7.参考文献

链接:https://www.cnblogs.com/Eason-S/p/5851078.html

作者:Eason-S

链接:http://www.cnblogs.com/zhaoyanjun/p/6074887.html

作者:luoxn28

8.更多讨论

鸣谢

感谢观看,如有出错,恳请指正

BY : 深圳分院 常雷雷