这里是修真院后端小课堂,每篇分享文从
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】
八个方面深度解析后端知识/技能,本篇分享的是:
【反射的基本使用】
【修真院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)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
更多内容,可以加入IT交流群565734203与大家一起讨论交流
这里是技能树·IT修真院:,初学者转行到互联网的聚集地
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。