写一个“框架”,不能改变任何该类的前提下,帮助我们创建任意类的对象,并且执行其中任意方法
(1)配置文件
(2)反射
(1)将所需要创建的对象的全类名(包名.类名)和需要执行的方法定义在配置文件中
(2)在程序中加载读取配置文件(使用Properties方法)
(3)使用反射技术来加载类文件进内存
(4)创建对象
(5)执行方法
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
    this.name = name;
    this.age = age;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}
@Override
public String toString() {
    return "Student{" +
            "name=‘" + name + ‘\‘‘ +
            ", age=" + age +
            ‘}‘;
}
public void sleep(){
    System.out.println("sleep,打呼噜");
}
public void school(){
    System.out.println("go to school");
}
}
className=Student//(全类名,这里直接在src内操作,所有可以省略包名,一般都是包名.类名)
methodName=sleep//(sleep方法)
methodName1=school//(school方法)
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;
public class ReflectTest {
public static void main(String[] args) throws Exception {
    //创建Properties对象
    Properties p = new Properties();
    //获取class目录下的配置文件
    ClassLoader classLoader = ReflectTest.class.getClassLoader();
    InputStream is = classLoader.getResourceAsStream("puge.yiyan");
    //调用load方法加载配置文件,转换为一个集合
    p.load(is);
    //获取配置文件中定义的数据
    String className = p.getProperty("className");
    String methodName = p.getProperty("methodName");
    String methodName1 = p.getProperty("methodName1");
    //加载该类进内存
    Class cls = Class.forName(className);
    //创建对象
    Object obj = cls.newInstance();
    //获取方法对象
    Method method = cls.getMethod(methodName);
    Method method1 = cls.getMethod(methodName1);
    //执行方法
    method.invoke(obj);
    method1.invoke(obj);
}
}
sleep,打呼噜
go to school
原文:https://www.cnblogs.com/LRF-/p/14736561.html