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

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

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

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

相关推荐
独自破碎E几秒前
BISHI56 分解质因数
java·开发语言
FL16238631295 分钟前
windows从源码安装python版本paddleocr3.4.0
开发语言·windows·python
感性的程序员小王14 分钟前
拒绝硬编码!利用 Java SPI 打造一个可插拔的代码解析器
java·后端
爱跑步的程序员~21 分钟前
SpringBoot集成SpringAI与Ollama本地大模型
java·后端·spring·ai·llama·springai
Grandpa_Rick27 分钟前
Join Module: Iteration #6 Nested Join
java
m0_5312371731 分钟前
C语言-static关键词,寄存器变量,define宏定义
c语言·开发语言
Y‍waiX‍‍‮‪‎⁠‌‫‎‌‫‬31 分钟前
CentOS7安装多版本jdk并切换jdk版本
java·jdk·centos
疯狂敲代码的老刘35 分钟前
MyBatis Generator GUI 下载安装教程 可视化MyBatis代码生成
java·mybatis·mybatis-ui
追随者永远是胜利者1 小时前
(LeetCode-Hot100)23. 合并 K 个升序链表
java·算法·leetcode·链表·go
Moshow郑锴1 小时前
Java SpringBoot 疑难 Bug 排查思路解析:从“语法正确”到“行为相符”
java·spring boot·bug