Java 反射机制
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class ReflectionHomework {
// 定义一个简单的静态内部类,用来作为反射测试的对象
static class Person {
private String name;
public Person() {
this.name = "默认名字";
}
public Person(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("你好,我是 " + name);
}
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) throws Exception {
System.out.println("--- Java 反射机制演示 ---");
// 1. 获取 Class 对象(三种方式之一,这里使用 Class.forName)
// 注意:内部类在 JVM 中的全限定名是 "外部类$内部类"
Class<?> clazz = Class.forName("ReflectionHomework$Person");
System.out.println("成功获取 Class 对象,类名: " + clazz.getName());
// 2. 通过反射调用构造方法(无参构造)创建实例
Constructor<?> constructor = clazz.getDeclaredConstructor();
Object personInstance = constructor.newInstance();
// 3. 通过反射调用普通方法(setName)
Method setNameMethod = clazz.getMethod("setName", String.class);
// invoke 方法第一个参数是对象实例,第二个及以后是实参
setNameMethod.invoke(personInstance, "反射创建的张三");
// 4. 通过反射调用 sayHello 方法
Method sayHelloMethod = clazz.getMethod("sayHello");
sayHelloMethod.invoke(personInstance); // 不需要传参
// 额外展示:获取类中所有的方法名
System.out.println("\n--- 查看该类所有方法 ---");
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method.getName());
}
}
}

浙公网安备 33010602011771号