美文网首页
java--关于反射入门

java--关于反射入门

作者: 预言之上 | 来源:发表于2018-03-26 21:59 被阅读28次

大家好,我是IT修真院深圳分院的学员,一枚正直纯洁善良的JAVA程序员。本次为大家带来关于反射的入门。

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.更多讨论

1.什么是反射?

一句话总结就是,反射就是把java类中的各种成分通过Class类映射成一个个的Java对象。

2.Java 中 Reflection 和 Introspection 区别?

说起反射,还有一个相似的概念 ‘Introspection’,字面意思是“自省、内省”,它们之间的区别如下:

内省 

在运行时检查一个对象的类型或者属性

最常见的例子就是运行时通过 a instanceof A 来判断 a 对象的类型

反射 

用来在运行时检查或者修改一个对象信息

可以用来实现看似不可能的操作,比如访问私有方法,动态创建对象

可以看到,反射是在内省的基础上,增加了修改的能力。

3.动态代理与反射的关系。

动态代理的代理类是实现了一个InvocationHandler的接口,我们通过reflect.Proxy的类的newProxyInstance方法就可以得到这个接口的实例,然后再来作为参数传递进去,每一个在代理类上处理的东西也会被重定向到调用处理器上。

至于动态代理和静态代理的区别,即动态代理是动态的创建代理和动态的处理方法的,这也是反射的一个重要体现之处。

PPT链接:戳这里看PPT

腾讯视频:腾讯视频

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧

直接点击此链接:http://www.jnshu.com/login/1/10985551

相关文章

  • java--关于反射入门

    大家好,我是IT修真院深圳分院的学员,一枚正直纯洁善良的JAVA程序员。本次为大家带来关于反射的入门。 1.背景介...

  • Java--反射

    反射就是程序在运行时能够获取自身的信息,在java中,只要给定类的名字, 就可以通过反射机制来获得类的所有信息。反...

  • Java--反射

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

  • Java--反射机制(一)——反射 API

    一、概述 1、Java反射机制(Java-Reflect): 在运行状态中,对于任意一个类,都能够知道这个类中的所...

  • 重拾Java--反射

    反射:框架设计的灵魂 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码 反射:将类的各个组成部分封装为其...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • Java--反射(框架设计的灵魂)

    Java--反射(框架设计的灵魂) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,...

  • Java--反射(框架设计的灵魂)案例

    Java--反射(框架设计的灵魂)案例 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇...

  • Java--对象入门

    面向对象编程(OOP)--更快和更廉价的开发与维护过程。 一、对象 1.所有的东西都是对象。 2.程序是一大堆对象...

  • Java--反射机制(二)——动态代理

    一、代理模式 定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过...

网友评论

      本文标题:java--关于反射入门

      本文链接:https://www.haomeiwen.com/subject/gcjdcftx.html