import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class ReflectionExample {
// 定义一个简单的类用于反射操作
public static class Person {
private String name;
public Person() {
this.name = "Default Name";
}
public Person(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void sayHello() {
System.out.println("Hello, my name is " + name);
}
}
public static void main(String[] args) {
try {
// 获取Class对象
Class<?> personClass = Class.forName("ReflectionExample$Person");
// 创建实例 (无参构造)
Constructor<?> defaultConstructor = personClass.getConstructor();
Object personInstance1 = defaultConstructor.newInstance();
Method setNameMethod = personClass.getMethod("setName", String.class);
setNameMethod.invoke(personInstance1, "Alice");
Method sayHelloMethod = personClass.getMethod("sayHello");
sayHelloMethod.invoke(personInstance1);
// 创建实例 (带参构造)
Constructor<?> paramConstructor = personClass.getConstructor(String.class);
Object personInstance2 = paramConstructor.newInstance("Bob");
sayHelloMethod.invoke(personInstance2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
定义类:我们定义了一个简单的 Person 类,包含私有属性 name、两个构造函数(无参和带参)、以及一些公共方法。
获取Class对象:使用 Class.forName 方法获取 Person 类的 Class 对象。ReflectionExample$Person 是内部类的全限定名。
创建实例:
getConstructor() 获取无参构造函数,并通过 newInstance() 创建实例。getMethod() 获取 setName 方法,并调用该方法设置 name 属性。getMethod() 获取 sayHello 方法,并调用该方法输出信息。带参构造:使用 getConstructor(String.class) 获取带参构造函数,并通过 newInstance("Bob") 创建实例。
异常处理:反射操作可能会抛出多种异常(如 ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException),因此需要捕获并处理这些异常。
上一篇:java for
下一篇:java 获取当前时间戳
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站