Java反射是运行时动态获取类信息并操作对象的强大机制,常用于框架开发和动态代理。以下是核心要点:

基础概念 📚

  • 反射能力:通过Class对象访问类的元数据
  • 关键类java.lang.Classjava.lang.reflect.Methodjava.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_深入解析。在这里,我们通过图片展示反射的核心概念:

Java_Reflection