Java反射是运行时动态获取类信息并操作对象的强大机制,常用于框架开发和动态代理。以下是核心要点:
基础概念 📚
- 反射能力:通过
Class
对象访问类的元数据 - 关键类:
java.lang.Class
、java.lang.reflect.Method
、java.lang.reflect.Field
- 操作类型:获取类名、构造方法、字段值、注解等
典型使用场景 🌐
- 框架中实现依赖注入(如Spring)
- 动态创建对象(
Class.newInstance()
) - 注解处理(如JUnit测试)
- 热点代码替换(JVM动态优化)
示例代码 📄
// 获取类信息
Class<?> clazz = Class.forName("com.example.MyClass");
// 获取构造方法
Constructor<?> constructor = clazz.getConstructor();
// 获取字段值
Field field = clazz.getField("myField");
field.setAccessible(true);
Object value = field.get(instance); // 需要实例对象
// 调用方法
Method method = clazz.getMethod("myMethod", String.class);
method.invoke(instance, "参数");
注意事项 ⚠️
- 安全限制:
setAccessible(true)
可能引发SecurityException - 性能开销:反射操作比直接调用慢约10-100倍
- 类加载要求:目标类必须已被加载到JVM中
想要深入了解Java反射机制,可以查看Java_Reflection_深入解析。在这里,我们通过图片展示反射的核心概念: