Java基础 - 反射
类加载器
反射是什么
反射(Reflection)是 Java 提供的一种能力,它允许程序在运行时检查和操作类、对象、方法、构造函数、字段等程序结构。
反射的作用:
Java 框架(比如 Spring、Hibernate)并不知道你会写哪些类,它必须在运行时“扫描”你的类、方法、注解,然后自动做一些操作。这必须靠反射。
一个软件支持插件,需要在运行时加载新插件类,也要用反射。
插件可以看作一个.jar
文件,添加插件时,放到特定的文件夹。主程序运行的时候,会扫描这个文件夹。主程序用自定义类加载器加载插件 jar 文件,然后通过反射调用插件里的代码。测试框架(JUnit)依赖反射。
1
2
3
4@Test
public void testLogin() {
// 测试登录逻辑
}JUnit 并不事先知道你写了哪些测试类和测试方法。它运行的时候,扫描所有类,找出有 @Test 注解的方法,实例化类对象,调用这些方法。
序列化 / 反序列化工具依赖反射。
序列化是把对象转换成可以存储或传输的格式(如 JSON、XML、二进制)。反序列化是反过来。
比如反序列化时,将 JSON 转换成Java对象(JSON介绍):
1 |
|
我们从 JSON 字符串中知道 “name” 字段,但程序怎么知道它对应哪个 Java 字段?这时要通过反射。
JAVA反射的原理
Class对象
在类加载器介绍提到,类加载器在堆中创建一个 Class 对象来存储类的信息。反射正是通过获取Class实例来获取到类的所有信息。
获取一个类的Class实例的方法:
通过类名访问
1
Class<?> clazz = String.class;
通过类的完整类名
1
Class<?> clazz = Class.forName("java.lang.String");
通过对象的
getClass()
方法1
2String str = "Hello";
Class<?> clazz = str.getClass();
Class对象的常见操作
1 |
|
Java基础 - 反射
https://thiefcat.github.io/2025/07/05/JAVA/reflection/