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

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

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

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

相关推荐
statistican_ABin1 分钟前
中国宠物经济发展分析报告——基于R语言的2018-2024年宠物市场多维度分析
开发语言·r语言·宠物
计算机毕设定制辅导-无忧学长9 分钟前
《基于Spring Boot传承之光非遗陶瓷烧造产品交易平台的设计与实现》
java·vue.js·spring boot·后端·毕业设计
Zane199412 分钟前
内存都要回收,为什么JVM偏要把堆分成新生代和老年代
java·后端
matlab代码16 分钟前
基于matlab PCA人脸识别系统【源码63期】
开发语言·matlab
Terra.K16 分钟前
后端开发阶段性总结
java·开发语言·后端
学逆向的19 分钟前
PE——合并节
开发语言·网络安全·pe
是个西兰花22 分钟前
C++11:线程库与线程安全问题
开发语言·c++
点心的游戏开发世界24 分钟前
GDScript 入门笔记(十三):字符串操作
开发语言·笔记·游戏引擎·godot
计算机学姐28 分钟前
基于SpringBoot的旅游系统的设计与实现
java·vue.js·spring boot·后端·spring·java-ee·旅游
卷心菜的学习路33 分钟前
Spring Boot 多数据源落地:AbstractRoutingDataSource + 注解切面(附源码)
java·spring boot·后端