当前位置:首页 > Java

如何使用java反射

2026-03-20 22:38:54Java

获取 Class 对象

Java 反射操作的第一步是获取目标类的 Class 对象。可以通过三种方式实现:

  • Class.forName("全限定类名") 动态加载类
  • 对象.getClass() 通过实例获取
  • 类名.class 直接通过类获取
Class<?> clazz = Class.forName("java.util.ArrayList");

创建实例

通过 Class 对象可以创建类的实例,包括调用无参构造器和带参构造器:

// 无参构造
Object listInstance = clazz.newInstance();

// 带参构造
Constructor<?> constructor = clazz.getConstructor(int.class);
Object initializedList = constructor.newInstance(10);

访问字段

反射可以获取和修改类的字段值,包括私有字段:

如何使用java反射

Field sizeField = clazz.getDeclaredField("size");
sizeField.setAccessible(true);  // 突破私有限制
int sizeValue = (int) sizeField.get(listInstance);

调用方法

通过反射可以调用对象的方法,包括静态方法和实例方法:

Method addMethod = clazz.getMethod("add", Object.class);
addMethod.invoke(listInstance, "test element");

Method staticMethod = clazz.getMethod("staticMethodName");
staticMethod.invoke(null);  // 静态方法传null

处理泛型

反射会擦除泛型信息,需要通过 ParameterizedType 获取真实类型:

如何使用java反射

Type genericType = field.getGenericType();
if (genericType instanceof ParameterizedType) {
    Type[] actualTypes = ((ParameterizedType)genericType).getActualTypeArguments();
}

性能优化

反射操作比直接调用慢,可以通过缓存反射对象提高性能:

// 缓存Method对象
private static final Method CACHED_METHOD;
static {
    CACHED_METHOD = clazz.getMethod("methodName");
}

安全考虑

使用反射时应注意安全管理器检查,通过 setAccessible(true) 可能引发安全异常:

try {
    field.setAccessible(true);
} catch (SecurityException e) {
    // 处理权限问题
}

动态代理

结合反射可以实现动态代理模式:

InvocationHandler handler = (proxy, method, args) -> {
    // 前置处理
    Object result = method.invoke(target, args);
    // 后置处理
    return result;
};
Proxy.newProxyInstance(loader, interfaces, handler);

分享给朋友:

相关文章

react如何使用

react如何使用

React 的基本使用 React 是一个用于构建用户界面的 JavaScript 库,以下是一些核心概念和使用方法。 安装 React 通过 create-react-app 快速搭建 React…

react filter如何使用

react filter如何使用

react filter 的基本用法 在 React 中,filter 通常用于筛选数组数据,常见于列表渲染或数据处理场景。filter 是 JavaScript 数组的原生方法,但在 React 中…

react如何使用echarts

react如何使用echarts

安装 ECharts 和 React 适配库 在 React 项目中使用 ECharts 需要安装 ECharts 核心库及其 React 适配库。通过 npm 或 yarn 安装: npm ins…

react ref 如何使用

react ref 如何使用

React Refs 的基本概念 Refs 提供了一种方式,允许直接访问 DOM 节点或在 React 组件中创建的实例。主要用于需要直接操作 DOM 或访问组件内部状态的场景,比如聚焦输入框、触发动…

react中如何使用echarts

react中如何使用echarts

安装 ECharts 依赖 在 React 项目中安装 ECharts 核心库和 React 封装库。使用 npm 或 yarn 安装: npm install echarts echarts-fo…

React如何使用防抖

React如何使用防抖

防抖的基本概念 防抖(Debounce)是一种限制函数执行频率的技术,确保函数在连续触发时只执行一次。在React中,常用于输入框搜索、窗口大小调整等高频事件场景。 使用Lodash实现防抖 Lod…