java如何实现反射
Java 反射实现方法
Java 反射机制允许在运行时动态获取类的信息、调用方法或操作字段。以下是核心实现方式:
获取 Class 对象
通过以下三种方式之一获取目标类的 Class 对象:
Class<?> clazz1 = Class.forName("java.lang.String"); // 全限定类名
Class<?> clazz2 = String.class; // 类字面常量
Class<?> clazz3 = "".getClass(); // 对象实例
实例化对象
通过 Class 对象创建实例:
Object obj = clazz1.newInstance(); // 调用无参构造
Constructor<?> cons = clazz1.getConstructor(String.class);
Object strObj = cons.newInstance("value"); // 带参数构造
访问字段
动态获取和修改字段值:
Field field = clazz1.getDeclaredField("value");
field.setAccessible(true); // 突破私有限制
char[] value = (char[]) field.get(strObj);
field.set(strObj, newValue);
调用方法
动态调用类方法:
Method method = clazz1.getMethod("substring", int.class);
String result = (String) method.invoke(strObj, 2);
处理数组
反射创建和操作数组:
Object array = Array.newInstance(String.class, 10);
Array.set(array, 0, "first");
String elem = (String) Array.get(array, 0);
注解处理
运行时获取注解信息:
Annotation[] annos = clazz1.getAnnotations();
if (clazz1.isAnnotationPresent(Deprecated.class)) {
// 处理特定注解
}
实际应用场景
- 框架开发(如Spring的依赖注入)
- 动态代理实现(AOP编程)
- 序列化/反序列化工具
- 单元测试框架(如JUnit)
注意事项
- 反射操作会绕过编译器检查,需处理大量异常(NoSuchMethodException等)
- 性能开销比直接调用高,频繁调用时应考虑缓存Class对象
- 破坏封装性,可能引发安全问题(需配合安全管理器使用)
反射API位于java.lang.reflect包,配合Class对象可实现绝大多数动态操作。







