Java创建一个Person类,在Person类中定义了一个sleep()方法。在工程中还定义了一个Student类继承Person类,在Student类中重写了Person类的sleep()方法。项目有一个配置文件,名称为test.properties,在配置文件中配置了一个className属性和一个methodName属性,className属性值是类的全限定类名,methodName属性值是方法名。本任务要求通过读取配置文件对类进行实例化,具体如下: (1)获取test.properties配置文件中的className属性值(类的全限定类名),利用反射对该类进行实例化。 (2)获取test.properties配置文件中的methodName属性值(方法名),利用反射获取对象方法,并执行该方法。
时间: 2024-03-24 10:37:03 浏览: 54
Java面向对象(高级)- 抽象类与抽象方法(或abstract关键字)
好的,我理解您的要求了。以下是一个简单的示例代码,演示如何通过读取test.properties配置文件,动态地调用指定类中的指定方法:
```java
import java.io.FileInputStream;
import java.lang.reflect.Method;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws Exception {
// 读取配置文件
Properties props = new Properties();
FileInputStream fis = new FileInputStream("test.properties");
props.load(fis);
// 获取className属性值,并通过反射实例化该类
String className = props.getProperty("className");
Class<?> clazz = Class.forName(className);
Object obj = clazz.newInstance();
// 获取methodName属性值,并通过反射调用该方法
String methodName = props.getProperty("methodName");
Method method = clazz.getMethod(methodName);
method.invoke(obj);
}
}
class Person {
public void sleep() {
System.out.println("Person is sleeping...");
}
}
class Student extends Person {
@Override
public void sleep() {
System.out.println("Student is sleeping...");
}
}
```
在上述示例代码中,我们先通过`FileInputStream`和`Properties`类读取了test.properties配置文件,并获取了其中的className和methodName属性值。然后,我们使用`Class.forName()`方法获取了className对应的类,再使用`newInstance()`方法实例化了该类的对象。最后,我们使用`getMethod()`方法获取对象的methodName方法,并使用`invoke()`方法调用该方法。
假设test.properties配置文件中的内容如下:
```
className=com.example.Student
methodName=sleep
```
则运行上述示例代码会输出:
```
Student is sleeping...
```
阅读全文