java中的反射

一、反射的概述

  • 反射机制

    是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意属性和方法; 这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。

二、获取Class类对象的三种方式

1、Class.forName("全类名"):源代码阶段

2、类名.class :类的对象创建完时

3、对象.getClass():运行阶段

三、Class类获取构造方法对象的方法

|-----------------------------------------------------------------------|-----------------|
| Constructor<?>\[\] getConstructors() | 返回所有公共构造方法对象的数组 |
| Constructor<?>\[\] getDeclaredConstructors() | 返回所有构造方法对象的数组 |
| Constructor<T> getConstructor(Class<?>... parameterTypes) | 返回单个公共构造方法对象 |
| Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) | 返回单个构造方法对象 |

四、Class类获取成员变量对象的方法

|-------------------------------------|-----------------|
| Field\[\] getFields() | 返回所有公共成员变量对象的数组 |
| Field\[\] getDeclaredFields() | 返回所有成员变量对象的数组 |
| Field getField(String name) | 返回单个公共成员变量对象 |
| Field getDeclaredField(String name) | 返回单个成员变量对象 |

五、Class类获取成员方法对象的方法

|---------------------------------------------------------------------|-----------------------|
| Method\[\] getMethods() | 返回所有公共成员方法对象的数组,包括继承的 |
| Method\[\] getDeclaredMethods() | 返回所有成员方法对象的数组,不包括继承的 |
| Method getMethod(String name, Class<?>... parameterTypes) | 返回单个公共成员方法对象 |
| Method getDeclaredMethod(String name, Class<?>... parameterTypes) | 返回单个成员方法对象 |

六、获取权限修饰符:getModifiers();

七、​暴力反射:

复制代码
setAccessible(true);
复制代码
newInstance();

反射允许你在运行时根据名称和参数类型来调用方法和访问字段,而不需要在编译时就确定具体的方法调用或字段访问。这为实现一些灵活的编程场景提供了可能,比如插件系统、依赖注入框架等。

例如,假设你有一个插件系统,插件的具体实现类在运行时才确定。通过反射,你可以在运行时加载插件类,查找特定的方法并调用它,而不需要在编译时就知道插件的具体实现。

总之,反射提供了一种强大的机制,使得程序在运行时可以更加灵活地操作对象和类,适应不同的需求和变化。但反射也有一些缺点,比如性能开销较大、代码可读性降低等,所以在使用反射时需要谨慎权衡其利弊。

相关推荐
海宇AI2 分钟前
零信任架构实战:基于海宇车型识别精准构建自动化车队评估微服务
java·人工智能·架构·自动化
维克兜率天4 分钟前
【维克】均值回归:跌多了会涨,涨多了会跌
开发语言·笔记·python·算法·均值算法·回归·量化
xixiaoyunya4 分钟前
Spring Boot 3 统一响应与全局异常处理实战
java·spring boot·后端
实心儿儿10 分钟前
Qt — Qt 窗口
开发语言·qt
2601_9622186111 分钟前
C++中分配器allocator的实现
开发语言·c++
一条破秋裤22 分钟前
Linux 线程分离与主动取消:pthread_detach、pthread_cancel
java·linux·jvm
wshzd23 分钟前
LLM之Agent(104)|DeepSeek-Harness(十三)ReactLoopAgent 总览:kick → turn → step
开发语言·前端·javascript
共享家952728 分钟前
C语言-408
c语言·开发语言
茉莉玫瑰花茶31 分钟前
OpenGL [ 基础概念 ]
java·前端·数据库