3.3使用实例:Java及射机制使用实例1.任务描述使用Java及射机制编写应用程序。任务需求如下。定义一个类Person,封装成员属性、成员方法、构造方法。使用反射机制获取该类的成员属性、成员方法,运行时创建Person类的实例并调用其方法
时间: 2024-10-11 20:06:59 浏览: 39
在Java中,我们可以利用反射API来动态地操作对象和其内部结构,包括访问私有成员变量和方法。首先,让我们定义一个`Person`类作为示例:
```java
public class Person {
private String name;
private int age;
// 构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 成员方法
public void introduce() {
System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
}
// 获取名字的getter方法
public String getName() {
return name;
}
}
```
接下来,我们将使用反射来完成指定的任务:
```java
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectExample {
public static void main(String[] args) throws Exception {
// 获取Person类的Class对象
Class<?> personClass = Class.forName("Person");
// 创建Person类的实例
Person person = (Person) personClass.newInstance();
// 设置成员属性
Field field = personClass.getDeclaredField("name");
field.setAccessible(true);
field.set(person, "Alice"); // 使用反射设置私有字段
// 调用成员方法
Method introduceMethod = personClass.getMethod("introduce");
introduceMethod.invoke(person); // 动态调用方法
// 获取和打印名字
Field getter = personClass.getDeclaredField("getName");
getter.setAccessible(true);
System.out.println("Name from reflection: " + getter.get(person));
}
}
```
在这个例子中,我们通过`Class.forName()`获取了`Person`类的Class对象,然后通过`newInstance()`动态创建了对象,并使用`getField()`和`getMethod()`方法分别获取了私有成员和公开方法。这展示了如何在运行时使用反射对`Person`类进行操作。
阅读全文