package com.xiaochen.javase.reflect;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
/*
验证反射机制的灵活性。
java代码写一遍,再不改变java源代码的基础之上,可以做到不同对象的实例化。
非常灵活。(符合OCP开闭原则:对扩展开放,对修改关闭。)
*/
public class ReflectTest03 {
public static void main(String[] args) {
/*
以下代码是灵活的,代码不需要改动,可以修改配置文件,配置文件修改之后
可以创建出不同的实例对象。
*/
//通过IO流读取classinfo.properties
FileReader fr = null;
try {
fr = new FileReader("xiaochen/classinfo.properties");
//创建属性类对象Map
Properties pro = new Properties(); //key和value都是String
//加载
pro.load(fr);
//通过key获取value
String className = pro.getProperty("className");
//System.out.println(className);
//通过反射机制实例化对象
Class c = Class.forName(className);
Object obj = c.newInstance();
System.out.println(obj);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} finally {
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
反射机制的灵活性
最新推荐文章于 2024-09-02 22:33:56 发布