📅  最后修改于: 2023-12-03 15:07:23.146000             🧑  作者: Mango
在 Java 中,反射是指能够在运行时检查、获取和修改任意一个类的内部属性、方法以及接口等信息的能力。Java 反射机制在许多框架和工具中都得到了广泛应用,如 Spring、Hibernate、JUnit 等。
Class
类:在 Java 中,每个对象都有一个对应的 Class
类,用于描述该对象的属性和方法等信息。Java 中使用 class
关键字定义一个类时也会被编译成 Class
类。Java.lang.reflect
包:该包中的类提供了 Java 反射机制的核心类和方法。例如,Class
类代表一个类,Method
类代表一个方法,Field
类代表一个属性。Class
类对象。import java.lang.reflect.*;
public class ReflectDemo {
public static void main(String[] args) throws Exception {
// 获取 String 类对应的 Class 类对象
Class<?> clazz = String.class;
// 获取 String 类的构造方法并创建对象
Constructor<?> constructor = clazz.getConstructor(String.class);
String str = (String) constructor.newInstance("Hello world");
// 获取 String 类的 length 方法并调用
Method lengthMethod = clazz.getMethod("length");
int length = (int) lengthMethod.invoke(str);
// 获取 String 类的 charAt 方法并调用
Method charAtMethod = clazz.getMethod("charAt", int.class);
char ch = (char) charAtMethod.invoke(str, 1);
// 获取 String 类的 value 属性并获取其值
Field valueField = clazz.getDeclaredField("value");
valueField.setAccessible(true);
char[] value = (char[]) valueField.get(str);
// 输出结果
System.out.println(str); // "Hello world"
System.out.println(length); // 11
System.out.println(ch); // 'e'
System.out.println(new String(value)); // "Hello world"
}
}
该示例中,我们首先获取了 String
类对应的 Class
类对象,然后分别使用反射机制获取了该类的构造方法、方法、属性,并进行了调用和操作。最后输出了结果。这个例子只是反射机制的冰山一角,反射机制还可以用于很多其他的场景。