反射创建对象
第一步
将对象的路径存到properties属性集文件中
为了方便,建议创建一个新文件夹
由于resource和src是同级目录,所以resouce目录下的文件会自动更新到classpath(bin目录)路径下面。我们看看效果
第二步:反射创建对象
package wuziqi;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.Properties;
public class PlayGame {
/* public static void main(String[] args) {//正常创建对象,硬编码 Game game=new Game(); game.playgame(); }*/
private static Properties p=new Properties();
static { //静态代码块不能抛出异常
/* * 从classpath,也就是bin目录,加载资源文件。 */
try {
ClassLoader loader=PlayGame.class.getClassLoader();
//从用来加载类的搜索路径(classpanth路径)打开具有指定名称的资源,以读取该资源。
InputStream in=loader.getResourceAsStream("plugins.properties");
p.load(in);//从流里读取数据
System.out.println(p);
Collection<Object> value=p.values();//从属性集中拿到所有value值
for (Object object : value) {
String classname=(String) object;
//System.out.println(classname);
try {
Class<?> clz=Class.forName(classname);//加载class字节码
Game game=(Game) clz.newInstance();//创建对象
game.playgame();//执行对象的方法
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
还没有评论,来说两句吧...