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();

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

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

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

相关推荐
ILYT NCTR23 分钟前
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
开发语言·后端·golang
小雅痞29 分钟前
[Java][Leetcode simple] 28. 找出字符串中第一个匹配项的下标
java·开发语言·leetcode
likerhood34 分钟前
java中的不可变类(Immutable)
java·开发语言
Ulyanov39 分钟前
《PySide6 GUI开发指南:QML核心与实践》 第一篇:GUI新纪元——QML与PySide6生态系统全景
开发语言·python·qt·qml·雷达电子对抗
Rust研习社1 小时前
从入门到实践:Rust 异步编程完全指南
开发语言·后端·rust
yaoxin5211231 小时前
389. Java IO API - 获取文件名
java·开发语言·python
Wang15302 小时前
Java排序
java
逸风尊者2 小时前
XGBoost模型工程使用
java·后端·算法
一嘴一个橘子2 小时前
MP 自定义业务方法 (二)
java
lhbian2 小时前
AI编程革命:Codex让脚本开发提速10倍
开发语言·汇编·jvm·c#