加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

反射的基本使用

发布时间:2020-12-14 06:35:58 所属栏目:Java 来源:网络整理
导读:这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能,本篇分享的是: 【反射的基本使用】 【修真院JAVA小课堂】反射的基本使用 大家

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能,本篇分享的是:

【反射的基本使用】

【修真院JAVA小课堂】反射的基本使用

大家好,我是IT修真院西安分院第四期的学员赵立鼐,一枚正直纯洁善良的JAVA程序员,今天给大家分享一下,修真院官网JAVA任务一,深度思考中的知识点——反射的基本使用

(1)背景介绍:

射反是么什

反射,从这个反字可以看出与我们平时正常的使用逻辑肯定不一样,那么到底什么地方不一样了?想要了解“反”,就得先了解一下正的概念。

在正常情况下,如果要使用一个类,必须要经过以下几个步骤:

(1)使用important导入类所在的包(类:java.lang.Class)

(2)通过关键字new进行类对象实例化(构造方法:java.lang.reflect.Constructor)

(3)产生对象可以使用“对象.属性”进行类中属性的调用(属性:java.lang.reflect.Field)

(4)通过“对象.方法()”调用类中的方法(方法:java.lang.reflect.Method)

在反射中,使用一个类并不需要导入类的所在包,只要知道类的完整路径就可以知道该类中的所有信息。

反射不需要有明确的类型对象,所有的对象都使用Object表示。可以直接用Object的与反射机制的混合调用类中的方法

Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态(或准动态,为啥要说是准动态,因为一般而言的动态语言定义是程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。)语言的一个关键性质。

(2)知识剖析:

用使的射反

获取Class对象的三种方式

1. Object ——> getClass();

通过getClass()方法:(通过对象)

2、通过对象实例方法获取对象:(通过对象)

3、类的全路径:(通过类名)

(3)常见问题:

反射的优缺点

(4)解决方案:

反射的优点当然是体现在它的动态性上面,能运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,降低类之间的藕合性。 一句话,反射机制的优点就是可以实现动态创建对象和编译,特别是在J2EE的开发中,它的灵活性就表现的十分明显。比如,一个大型的软件,不可能一次就把 它设计的很完美,当这个程序编译后,发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如这样的话,这个软件肯定是没有多少人用的。采用静态的话,需要把整个程序重新编译一次才可以实现功能的更新,而采用反射机制的话,它就可以不用卸载,只需要在运行时才动态的创建 和编译,就可以实现该功能。?

? 它的缺点是对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。?

(5)编码实战:

尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。

(6)拓展思考:

?? JAVA反射的应用场合

在Java程序中许多对象在运行时都会出现两种类型:

编译时类型和运行时类型

编译时的类型由声明该对象时使用的类型决定,

运行时的类型由实际赋给对象的类型决定

如: Person p =new Student();

编译时类型为Person,而运行时为Student

除此之外,程序在运行时还可能接收到外部传入的一个对象,该对象的编译时类型为Object,

但程序又需要调用该对象运行时类型的方法。为了这些问题程序需要在运行时发现对象和类的真实信息。

然而,如果编译时根本无法预知该对象和类可能属于哪些类,程序只依靠运行时信息来发现该对象和类的真实信息,

此时就必须使用反射

最后总结一哈

反射简单来说,就是动态加载对象,并对对象进行剖析。

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

对于任意一个对象,都能够调用它的任意一个方法,这种动态获取信息的功能称为Java语言的反射机制

(7)参考文献:

(8)更多讨论:

Q1:鲁伯良:?Spring中的Ioc与反射的关系

Spring中的IoC的实现原理就是工厂模式加反射机制。一般的工厂类添加子类时需要修改工厂类,使用反射机制的工厂模式可以通过反射取得接口的实例,但是需要传入完整的包和类名。而且用户也不知道一个接口有多少个可以使用的子类,我们需要通过属性文件的形式配置所有的子类。

Q2:乔名震: 反射机制的应用场景

A2: 赵立鼐 :??逆向代码 ,例如反编译

与注解相结合的框架?

单纯的反射机制应用框架?

动态生成类框架。

Q3:鲁伯良: 反射有什么好处?

A3: 赵立鼐: 提高程序的灵活行,和扩展性,降低耦合行,提升自适应能力,它允许程序创建和控制任意一个类的对象,不需要对目标类进行编码;

(9)鸣谢:

感谢刘优、乔名震师兄,此教程是在他们之前技术分享的基础上完善而成。

(10)结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

PPT链接?视频链接

更多内容,可以加入IT交流群565734203与大家一起讨论交流

这里是技能树·IT修真院:,初学者转行到互联网的聚集地

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读