需求:
写一个"框架",不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法
实现:
1.配置文件
2.反射
public class ReflectTest {
public static void main(String[] args) throws Exception {
//可以创建任意类的对象,可以调用任意类的方法
//1.1 穿件Properties对象
Properties pro = new Properties();
//1.2 加载配置文件,转换为一个集合
//1.2.1 获取class目录下的配置文件
ClassLoader classLoader = ReflectTest.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("pro.Properties");//获得字节流
pro.load(is); //加载(需要声明异常)
//2.获取配置文件中定义的数据
String className = pro.getProperty("className");
String methodName = pro.getProperty("methodName");
//3.加载该类进内存
Class cls = Class.forName(className);
//4.创建对象
//Object obj = cls.newInstance(); //Java9之后显示已过时
// method.invoke(c.newInstance());
Object obj = cls.getDeclaredConstructor().newInstance();
//5.获取方法对象
Method m = cls.getMethod(methodName);
//6.执行方法
m.invoke(obj);
}
配置文件 pro.properties
className = junit.SystemInfo
methodName = printo
当需要运行不同类或者不同方法时,只需要改配置文件,提高了程序的扩展性
如果运行时出现 inStream parameter is null 错误
需核验配置文件路径是否正确
在IDEA中将java文件夹与resources文件夹放在同一级目录即可