反射机制
2026/8/24大约 1 分钟
反射机制
反射:动态加载指定类并获取其中的所有内容,把字节码文件的内容封装成对象。
什么是反射
反射技术就是动态加载一个指定的类,并获取该类中的所有内容,将字节码文件中的内容都封装成对象,便于操作这些成员。简单说:反射技术可以对一个类进行解剖。
反射的好处
大大增强了程序的扩展性。
反射的基本步骤
- 获得 Class 对象:获得指定名称的字节码文件对象
- 实例化对象:获得类的属性、方法或构造函数
- 访问与调用:访问属性、调用方法、调用构造函数创建对象
获取 Class 对象的三种方式
// 方式一:Class.forName()(最常用,动态加载)
Class<?> clazz = Class.forName("com.example.Person");
// 方式二:类名.class
Class<?> clazz = Person.class;
// 方式三:对象.getClass()
Person p = new Person();
Class<?> clazz = p.getClass();反射常用操作
// 创建实例
Object obj = clazz.getDeclaredConstructor().newInstance();
// 获取并调用方法
Method method = clazz.getDeclaredMethod("setName", String.class);
method.invoke(obj, "张三");
// 访问私有字段(需 setAccessible(true))
Field field = clazz.getDeclaredField("age");
field.setAccessible(true);
field.set(obj, 25);在 Android 中的应用
- 插件化/热修复:动态加载 dex 中的类
- 反射访问系统隐藏 API(如
ActivityManager私有方法) - 注解处理与依赖注入框架(如 ButterKnife、EventBus 等框架底层)