一个经典的反射应用场景:
1. 三个Java文件,分别叫servlet1.java,servlet2.java,servlet3.java,每个文件中各自有一个构造函数,当类被用来new一个新对象时,会自动调用这个构造函数
//servlet1.java
public class servlet1
{
public servlet1()
{
System.out.println("我是servlet1");
}
}
//servlet2.java
public class servlet2 { public servlet2() { System.out.println("我是servlet2"); } }
//servlet3.java
public class servlet3 { public servlet3() { System.out.println("我是servlet3"); } }
2.然后有一个配置文件.properties文件 三个key-value键值对
aaaa=servlet1 bbbb=servlet2 cccc=servlet3
3.通过反射机制来创建对象
Scanner s=new Scanner(System.in);
String key=s.nextLine();//输入key,然后后面就可以用Propertie对象查找
//将properties文件里的键值对添加到Properties对象(一个hashmap)里
FileReader reader=new FileReader("D:\桌面\Java代码
\djbServlet\test.properties");
Properties pro=new Properties();
pro.load(reader);
reader.close();
String className=pro.getProperty(key);//通过key得到对应的那个servlet名字
(字符串)
//通过反射机制创建对象
Class a=Class.forName(className);
Object b=a.newInstance();
最后如果你输入 aaaa,运行程序会输出:我是servlet1(因为创建了一个servlet1类的对象)
最后如果你输入 bbbb,运行程序会输出:我是servlet2(因为创建了一个servlet2类的对象)
最后如果你输入cccc,运行程序会输出:我是servlet3(因为创建了一个servlet3类的对象)
总结:
比如有一个Person类,我利用这个类new了一个对象xiaoming
然后有个hashmap里面有这样一个键值对(key和value都是字符串String):xiaoming=Person,表示小明这个对象是属于Person类的
String value=map.get(key);//key是“xiaoming”,value是“Person”,都是字符串
Class a=Class.forName(value);
Object xiaohong=a.newInstance();//成功的new了一个Person类对象xiaohong



