这里是修真院后端小课堂,每篇分享文从
八个方面深度解析后端知识/技能,本篇分享的是:
【反射的基本使用】
【修真院java小课堂】反射的基本使用
大家好,我是IT修真院西安分院第4期的学员鲁伯良,一枚正直纯洁善良的java程序员,今天给大家分享一下,修真院官网java任务1,深度思考中的知识点——反射的基本使用
(1)背景介绍:
java的反射机制
对于任意一个类,都能知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
java反射机制主要提供以下功能:
1.在运行时判断任意一个对象所属的类。
2.在运行时构造任意一个类的对象
3.在运行是判断任意一个类所具有的成员变量和方法
4.在运行时调用任意一个对象的方法
5.生成动态代理
(2)知识剖析:
实现java反射机制
1.Class类:代表一个类
2.field类:代表类的成员变量(成员变量也称为类的属性)
3.method类:代表类的方法
4.Constructor类:代表类的构造方法
4.Array类:提供了动态创建数组,以及访问数组元素的静态方法
实现java反射机制的流程是什么样的
1).获取对象类型
2).获取对象的属性和方法
3)给对象的属性和方法传参
4)调用对象的方法并执行
(3)常见问题:
1.使用反射和new一个对象来调用对象的方法有什么区别
(4)解决方案:
反射是程序可以访问,检测它本身状态或者行为的一种能力
运行过程中可以知道一个类的属性和方法,还可以修改。
反射调用方法是在程序运行过程中,使用new一个对象这种方式是在编译的时候就已经获取到对象的属性和方法。
(5)编码实战:
(6)拓展思考:
什么是动态?
1.开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。
2.从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。
3.尽管在这样的定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关机制:Reflection。这个字的意思是“反射、映象、倒影”,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。这种“看透class”的能力(the ability of the program to examine itself)被称为introspection(内省、内观、反省)。Reflection和introspection是常被并提的两个术语。
(7)参考文献:
互联网
(8)更多讨论:
Q1:反射可以做什么?
A1:可以在程序运行的时候,获取一个完全未知的类的方法和属性,对它的属性赋值,和调用它的方法
Q2:反射有什么好处?
A2:提高程序的灵活行,和扩展性,降低耦合行,提升自适应能力,它允许程序创建和控制任意一个类的对象,不需要对目标类进行编码;
Q3:什么情况下要用到反射?
A3:1.在编译时无法知道该对象或类属于哪些类,此时就可以使用反射了,对象名.getClass ,类.Class.
2.很少情况下是非用反射不可的。大多数情况下反射是为了提高程序的灵活性。因此一般框架中使用较多。因为框架要适用更多的情况。对灵活性要求较高。