反射(Reflection)是 Java 语言中一个重要的特性,它允许程序在运行时动态地获取类的信息并操作类的属性、方法和构造函数等元素,而不需要在编译时确定这些元素。
使用反射机制可以实现很多高级功能,如通过字符串获取类、获取类的成员变量和方法等等。但是,由于反射机制会牺牲一定的性能和安全性,因此在实际使用时需要谨慎处理
public class ReflectionExample {
public static void main(String[] args) throws Exception {
// 获取Person类的Class对象
Class personClass = Person.class;
// 创建Person类的实例
Person person = (Person) personClass.newInstance();
// 获取Person类的name属性,并设置其值为"张三"
Field nameField = personClass.getDeclaredField("name");
nameField.setAccessible(true);
nameField.set(person, "张三");
// 获取Person类的sayHello方法,并调用它
Method sayHelloMethod = personClass.getDeclaredMethod("sayHello");
sayHelloMethod.invoke(person);
}
}
class Person {
private String name;
public void sayHello() {
System.out.println("Hello, my name is " + name);
}
}
在上面的示例代码中,我们首先获取了Person类的Class对象。然后通过newInstance()方法创建了一个Person类的实例。接着,我们使用反射机制获取了Person类的name属性,并设置其值为"张三"。最后,我们又使用反射机制获取了Person类的sayHello方法,并调用它。