package demo5;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
/*
* 通过配置文件运行类中的方法
* 反射: 需要有配置文件配合使用
* 用class.txt代替
* 并且知道有两个键
* className
* methodName
*/
public class Test {
public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
//加载键值对数据
Properties prop = new Properties();
FileReader fr = new FileReader("class.txt");
prop.load(fr);
fr.close();
//获取数据
String className = prop.getProperty("className");
String methodName = prop.getProperty("methodName");
//反射 得到对象
Class c = Class.forName(className);
//得到其无参构造方法
Constructor con = c.getConstructor();
//
//根据构造方法创建对象
Object obj = con.newInstance();
//得到这个方法
Method m = c.getMethod(methodName);
m.invoke(obj);
}
}
class.text 中的内容
className = demo5.Teacher
methodName = love
package demo5;
public class Teacher {
public void love(){
System.out.println("爱生活,爱学生");
}
}
package demo5;
public class Student {
public void love(){
System.out.println("爱生活,爱java");
}
}