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 中文站