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

posted on 2026-06-18 19:18  94hc  阅读(1)  评论(0)    收藏  举报