clazz = Class.forName("java.lang.Strin…">
当前位置:首页 > Java

如何使用反射java

2026-03-25 03:38:19Java

获取 Class 对象

通过 Class.forName("全限定类名") 获取类对象,例如 Class<?> clazz = Class.forName("java.lang.String")。也可以使用类字面常量(.class),如 String.class

实例化对象

通过 clazz.newInstance() 调用无参构造器创建实例(已过时,Java 9+推荐使用 clazz.getDeclaredConstructor().newInstance())。若需调用有参构造器,需先获取 Constructor 对象:

Constructor<?> constructor = clazz.getDeclaredConstructor(String.class);
Object instance = constructor.newInstance("example");

访问字段

通过 getField(公开字段)或 getDeclaredField(所有字段)获取 Field 对象,使用 set/get 读写值:

如何使用反射java

Field field = clazz.getDeclaredField("fieldName");
field.setAccessible(true); // 突破私有限制
field.set(instance, "newValue");
Object value = field.get(instance);

调用方法

通过 getMethod(公开方法)或 getDeclaredMethod(所有方法)获取 Method 对象,使用 invoke 调用:

Method method = clazz.getDeclaredMethod("methodName", String.class);
method.setAccessible(true);
Object result = method.invoke(instance, "arg1");

处理数组

使用 Array 类动态创建或操作数组:

如何使用反射java

Object array = Array.newInstance(String.class, 3);
Array.set(array, 0, "first");
String element = (String) Array.get(array, 0);

泛型与反射

泛型信息在运行时会被擦除,可通过 ParameterizedType 等接口获取部分元数据,但实际类型需通过上下文推断。

性能考虑

反射操作比直接调用慢,频繁调用时可考虑缓存 Method/Field 对象,或使用 MethodHandle(Java 7+)优化性能。

安全限制

反射可能受 SecurityManager 限制,需处理 SecurityException。模块化系统(Java 9+)中需在模块声明中开放权限(opens)。

注意:反射破坏了封装性,应优先考虑设计模式(如工厂、代理)替代直接反射调用。

分享给朋友:

相关文章

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment 基本…

react router如何使用

react router如何使用

React Router 的基本使用 安装 React Router 库,使用 npm 或 yarn 进行安装: npm install react-router-dom 配置路由 在应用的入口文件…

react如何使用jquery

react如何使用jquery

在 React 中使用 jQuery React 和 jQuery 的设计理念不同,React 基于虚拟 DOM 和数据驱动,而 jQuery 直接操作真实 DOM。若需在 React 中整合 jQu…

react如何使用less

react如何使用less

使用 Less 在 React 项目中 要在 React 项目中使用 Less,需要安装相关依赖并配置构建工具(如 Webpack 或 Create React App 的配置覆盖)。以下是具体方法:…

React如何使用防抖

React如何使用防抖

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

react中如何使用onblur

react中如何使用onblur

在 React 中使用 onBlur 事件 onBlur 是当元素失去焦点时触发的事件。在 React 中,可以通过以下方式使用: 基础用法 <input type="text…