反射的定义
什么是反射:
反射是java提供的一套动态执行的API。也就是说是在运行状态中,对于任意一类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能成为java语言的反射机制
Class属性的获取
Class对象: 是反射的入口,加载类到内存。获取class对象的三种方式
-
方式一、(知道包名+ 类名)动态获取
class.forname(“”);
获取结果:
包名+类名可以是自定义的也可以是java自带的
-
方式二、类名.class 获取
在java中所有的类都默认有一个.class属性
获取结果
-
方式三、对象.getclass
经常用于动态检查某个对象的类型
获取结果:
根据类名创建对象
.newInstance();
获取结果
访问对象属性
- 步骤1:加载class属性
- 步骤2:调用.getFields方法
结果:
读取对象的属性值
读取公有属性
1.获取指定公有属性:getField
- 创建对象
- 读取属性值
结果:
2.获取全部公有属性:getFields
结果
3.读取全部属性:包括私有属性
200的属性值是私有,必须打开访问权限,否则会报错
4.读取指定属性值(包括私有)
结果:
修改对象属性:set
结果:
访问方法
- 步骤1:获取Class
- 步骤2.在类上找到声明的法:getDeclaredMethod
- 步骤3.在对象上调用方法
结果:
动态打开访问权限
在利用反射访问属性/方法之前使用setAccessible打开访问权限