java如何反射
反射基础概念
Java反射机制允许在运行时动态获取类的信息、调用对象方法或修改属性。反射的核心是通过Class类操作其他类的元数据。
获取Class对象
通过三种方式获取目标类的Class对象:
Class<?> clazz1 = Class.forName("java.lang.String"); // 类全限定名
Class<?> clazz2 = String.class; // 类字面量
Class<?> clazz3 = "abc".getClass(); // 对象实例
实例化对象
通过Class对象创建实例:

Class<?> clazz = Class.forName("java.util.ArrayList");
Object instance = clazz.newInstance(); // 调用无参构造
// Java9+推荐使用getDeclaredConstructor().newInstance()
访问字段
动态获取和修改字段值:
Field field = clazz.getDeclaredField("fieldName");
field.setAccessible(true); // 突破private限制
field.set(instance, value); // 设置字段值
Object value = field.get(instance); // 获取字段值
调用方法
动态调用对象方法:

Method method = clazz.getDeclaredMethod("methodName", parameterTypes);
method.setAccessible(true);
Object result = method.invoke(instance, args);
操作数组
通过反射创建和操作数组:
Object array = Array.newInstance(String.class, 10);
Array.set(array, 0, "first");
String element = (String) Array.get(array, 0);
泛型处理
运行时泛型类型擦除的应对方案:
Type genericType = field.getGenericType(); // 获取泛型类型
if (genericType instanceof ParameterizedType) {
Type[] actualTypes = ((ParameterizedType)genericType).getActualTypeArguments();
}
性能优化
反射操作比直接调用慢,可通过缓存Method/Field对象提升性能。Java8之后推荐使用MethodHandle替代部分反射操作。






