反射
在java.long.reflect包下
提供用于获取有关类和对象的反射信息的类和接口。Reflection允许以编程方式访问有关已加载类的字段,方法和构造函数信息,以及使用反射字段,方法和构造函数在封装和安全限制内对其底层对应项进行操作。
AccessibleObject允许在必要的ReflectPermission可用时禁止访问检查。
Array提供了动态创建和访问数组的静态方法。
此包中的类以及java.lang.Class适用于调试器,解释器,对象检查器,类浏览器等应用程序,以及需要访问目标对象的公共成员(基于其运行时类)的对象序列化和javaBean等服务。由给定类声明的成员。
反射学什么
学习如何获取类的信息、操作它们
Step1:加载类,获取类的字节码:Class对象;
Step2:获取类的构造器:Constructor对象
Step3:获取类的成员变量:Field对象
Step4:获取类的成员方法:Method对象
step1:加载类
获取Class对象的三种方法
- Class c1 = 类名.class
- 调用Class提供方法:public static Class forName(String package);
- Object提供的方法:public Class getClass(); Class c3 = 对象.getClass();
step2:获取类的构造器
获取类构造器的作用:依然是初始化对象返回
Step3:获取类的成员变量
在反射中获取成员变量的作用:赋值、取值
step4:获取类的成员方法
成员方法的作用:依然是执行
作用
- 基本作用:可以得到一个类的全部成分然后操作
- 可以破坏封装性
- 最重要的用途是:适合做Java的框架,基本上,主流的框架都会基于反射设计出一些通用的功能
简单案例
需求:对于任意一个对象,该框架都可以把对象的字段名和对应的值,保存到文件中去
实现步骤:
- 定义一个方法,可以接收任意对象;
- 每收到一个对象后,使用反射获取该对象的Class对象,然后获取全部的成员变量;
- 遍历成员变量,然后提取成员变量在该对象中的具体值
- 把成员变量名、和其值,写到文件中去即可。
结果: