当前位置:首页 > Java

java反射如何实现

2026-03-21 00:37:43Java

实现 Java 反射的基本方法

Java 反射机制允许在运行时动态获取类的信息并操作类或对象的属性、方法等。以下是实现反射的核心步骤:

获取 Class 对象

java反射如何实现

  • 通过类名获取:Class.forName("全限定类名")
    示例:Class<?> clazz = Class.forName("java.lang.String");
  • 通过对象获取:对象.getClass()
    示例:String str = ""; Class<?> clazz = str.getClass();
  • 通过类字面常量获取:类名.class
    示例:Class<?> clazz = String.class;

实例化对象

  • 通过 Class.newInstance()(已废弃,Java 9+推荐使用构造器):
    Object obj = clazz.getDeclaredConstructor().newInstance();
  • 调用带参数的构造器:
    Constructor<?> constructor = clazz.getConstructor(String.class);
    Object obj = constructor.newInstance("test");

操作字段和方法

访问字段

java反射如何实现

  • 获取字段并修改值:
    Field field = clazz.getDeclaredField("fieldName");
    field.setAccessible(true); // 突破私有限制
    field.set(obj, "newValue");

调用方法

  • 调用公共方法:
    Method method = clazz.getMethod("methodName", String.class);
    method.invoke(obj, "arg");
  • 调用私有方法:
    Method privateMethod = clazz.getDeclaredMethod("privateMethod");
    privateMethod.setAccessible(true);
    privateMethod.invoke(obj);

动态代理示例

反射常用于实现动态代理:

interface Service { void serve(); }
class RealService implements Service {
    public void serve() { System.out.println("实际服务"); }
}

InvocationHandler handler = (proxy, method, args) -> {
    System.out.println("代理前操作");
    Object result = method.invoke(new RealService(), args);
    System.out.println("代理后操作");
    return result;
};

Service proxy = (Service) Proxy.newProxyInstance(
    Service.class.getClassLoader(),
    new Class[]{Service.class},
    handler
);
proxy.serve();

注意事项

  • 反射会绕过访问权限检查,可能破坏封装性。
  • 反射操作比直接调用性能更低,频繁调用时应考虑缓存 ClassMethod 对象。
  • Java 模块化系统(Java 9+)中需在模块描述文件(module-info.java)中明确开放反射权限:
    opens package.to.open;

分享给朋友:

相关文章

vue手写签名如何实现

vue手写签名如何实现

实现 Vue 手写签名的步骤 使用 canvas 实现基础签名功能 在 Vue 项目中创建一个组件,利用 HTML5 的 canvas 元素实现手写签名功能。通过监听鼠标或触摸事件来捕获用户的绘制路径…

h5如何实现定位

h5如何实现定位

使用HTML5 Geolocation API HTML5提供了Geolocation API,可以获取用户的地理位置信息。通过navigator.geolocation对象实现,支持获取经纬度、海拔…

前段vue如何实现

前段vue如何实现

Vue 前端实现方法 Vue 是一款流行的前端框架,用于构建用户界面。以下是一些常见的 Vue 实现方法: 组件化开发 Vue 的核心思想是组件化开发。每个组件可以独立封装逻辑、模板和样式,便于复用…

java如何实现单点登录

java如何实现单点登录

单点登录(SSO)的基本概念 单点登录是一种用户认证机制,允许用户通过一次登录访问多个相互信任的应用系统。核心原理是通过共享认证状态(如Token或Cookie)实现跨系统身份验证。 基于Token…

vue框架如何实现

vue框架如何实现

Vue框架实现步骤 安装Vue.js 通过npm或CDN引入Vue.js,npm安装命令:npm install vue。CDN引入直接在HTML文件中添加Vue.js的script标签。 创建Vu…

vue如何实现删除

vue如何实现删除

Vue 删除功能的实现方法 在 Vue 中实现删除功能通常涉及以下几个关键步骤: 数据绑定与列表渲染 使用 v-for 指令渲染列表数据,为每个项目添加删除按钮。确保数据存储在 Vue 的 data…