java如何用反射
反射的基本概念
反射是Java提供的一种机制,允许在运行时检查或操作类、方法、字段等信息。通过反射可以动态调用方法、访问字段,甚至创建类的实例。
获取Class对象
反射操作的第一步是获取目标类的Class对象。可以通过以下方式获取:
- 类名.class:
Class<?> clazz = String.class; - 对象.getClass():
String str = "test"; Class<?> clazz = str.getClass(); - Class.forName():
Class<?> clazz = Class.forName("java.lang.String");
创建实例
通过Class对象可以动态创建类的实例:
Class<?> clazz = Class.forName("java.lang.String");
String str = (String) clazz.getDeclaredConstructor().newInstance();
调用方法
反射可以调用类的方法,包括私有方法:
Method method = clazz.getMethod("methodName", parameterTypes);
Object result = method.invoke(targetObject, args);
访问字段
反射可以读取或修改字段的值:
Field field = clazz.getDeclaredField("fieldName");
field.setAccessible(true);
Object value = field.get(targetObject);
field.set(targetObject, newValue);
处理私有成员
默认情况下无法访问私有成员,需要调用setAccessible(true):
Method privateMethod = clazz.getDeclaredMethod("privateMethod");
privateMethod.setAccessible(true);
privateMethod.invoke(targetObject);
性能考虑
反射操作比直接调用性能更低,应谨慎使用。频繁调用的代码应考虑其他替代方案。
安全限制
反射可能绕过访问控制,存在安全风险。安全管理器可以限制反射操作。

常见应用场景
反射常用于框架开发、动态代理、单元测试等需要动态操作类的场景。






