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

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

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

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

相关推荐
程序猿大帅7 小时前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java
程序员晓琪8 小时前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端
Flittly8 小时前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
众少成多积小致巨8 小时前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
东坡白菜8 小时前
破局全栈:前端开发的Java入门实战记录—JPA(2)
java·后端
SimonKing15 小时前
艹,维护AI写的代码,我心态崩了......
java·后端·程序员
用户2986985301415 小时前
Java Word 文档样式进阶:段落与文本背景色设置完全指南
java·后端
小bo波1 天前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
nanxun8862 天前
记一次诡异的 Docker 容器"串包"故障排查
java
用户1563068103512 天前
Day01 | Java 基础(Java SE)
java