- package com.itheima;
- import java.io.File;
- import java.io.FileInputStream;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Method;
- import java.util.Properties;
- public class Test7 {
- /**
- * 7、 已知一个类,定义如下:
- *
- * package cn.itcast.heima;
- * public class DemoClass {
- * public void run() {
- * System.out.println("welcome to heima!");
- * }
- * }
- * (1)写一个Properties格式的配置文件,配置类的完整名称。 (2)
- * (2)写一个程序,读取这个Properties配置文件,获得类的完整名称并加载这个类,用反射 的方式运行run方法。
- * @param args
- */
- public static void main(String[] args) throws Exception {
- loadFile();
- }
- public static void loadFile() throws Exception {
- // 利用Properties类加载配置文件,它以键值对形式取出数据
- Properties prop = new Properties();
- // 字节读取配置文件
- FileInputStream fis = new FileInputStream(new File(
- "src/com/itheima/Test.properties"));
- // 加载配置文件中键值
- prop.load(fis);
- // System.out.println(prop);
- // 关闭流
- fis.close();
- // 设置了key,通过配置文件的key取出类的完整名称
- String stringClassName = prop.getProperty("className");
- // 设置了key,通过配置文件的key取出类的完整方法名称
- String stringMethedName = prop.getProperty("methedName");
- //反射 反射三步1
- Class<?> forName = Class.forName(stringClassName);
- //调用无参构造 2
- Constructor<?> constructor = forName.getConstructor();
- System.out.println(forName);
- //利用无参构造对象实例化 3
- Object newInstance = constructor.newInstance();
- //调取对象的方法
- Method methods = forName.getMethod(stringMethedName);
- //调用方法(调用newInstance对象的methods方法)
- methods.invoke(newInstance);
- }
- }
复制代码
|
|