当前位置:首页 > 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);

访问字段

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

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 获取真实类型:

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) {
    // 处理权限问题
}

动态代理

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

如何使用java反射

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

分享给朋友:

相关文章

react激光如何使用

react激光如何使用

安装React激光库 在项目中安装React激光库,通常通过npm或yarn完成。确保项目已初始化并具备React环境。 npm install react-laser-beam # 或 yar…

如何使用react native

如何使用react native

安装开发环境 确保系统已安装Node.js(建议LTS版本)。通过npm或yarn全局安装React Native命令行工具: npm install -g react-native-cli # 或…

内网如何使用react框架

内网如何使用react框架

内网使用React框架的部署与开发方法 在无外网连接的内网环境中使用React框架,需提前准备依赖包并配置本地开发环境。以下是具体实施方案: 离线安装Node.js和npm 从官网下载Node.js…

react中如何使用swiper

react中如何使用swiper

安装 Swiper 依赖 在 React 项目中使用 Swiper 需要安装 Swiper 的核心库和 React 组件库。通过 npm 或 yarn 安装以下依赖: npm install swi…

react中的hook如何使用

react中的hook如何使用

React Hook 的基本概念 Hook 是 React 16.8 引入的特性,允许在不编写 class 的情况下使用 state 和其他 React 特性。常见的 Hook 包括 useState…

react如何使用layer弹出层

react如何使用layer弹出层

使用 React 实现弹出层(Layer) React 中实现弹出层可以通过自定义组件或第三方库(如 react-modal、@mui/material 的 Dialog)完成。以下是两种常见方法:…