反射创建对象

喜欢ヅ旅行 2022-02-04 03:17 303阅读 0赞

第一步

将对象的路径存到properties属性集文件中
在这里插入图片描述
为了方便,建议创建一个新文件夹
在这里插入图片描述
由于resource和src是同级目录,所以resouce目录下的文件会自动更新到classpath(bin目录)路径下面。我们看看效果
在这里插入图片描述

第二步:反射创建对象

  1. package wuziqi;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.Collection;
  5. import java.util.Properties;
  6. public class PlayGame {
  7. /* public static void main(String[] args) {//正常创建对象,硬编码 Game game=new Game(); game.playgame(); }*/
  8. private static Properties p=new Properties();
  9. static { //静态代码块不能抛出异常
  10. /* * 从classpath,也就是bin目录,加载资源文件。 */
  11. try {
  12. ClassLoader loader=PlayGame.class.getClassLoader();
  13. //从用来加载类的搜索路径(classpanth路径)打开具有指定名称的资源,以读取该资源。
  14. InputStream in=loader.getResourceAsStream("plugins.properties");
  15. p.load(in);//从流里读取数据
  16. System.out.println(p);
  17. Collection<Object> value=p.values();//从属性集中拿到所有value值
  18. for (Object object : value) {
  19. String classname=(String) object;
  20. //System.out.println(classname);
  21. try {
  22. Class<?> clz=Class.forName(classname);//加载class字节码
  23. Game game=(Game) clz.newInstance();//创建对象
  24. game.playgame();//执行对象的方法
  25. } catch (ClassNotFoundException e) {
  26. // TODO Auto-generated catch block
  27. e.printStackTrace();
  28. } catch (InstantiationException e) {
  29. // TODO Auto-generated catch block
  30. e.printStackTrace();
  31. } catch (IllegalAccessException e) {
  32. // TODO Auto-generated catch block
  33. e.printStackTrace();
  34. }
  35. }
  36. } catch (IOException e) {
  37. // TODO Auto-generated catch block
  38. e.printStackTrace();
  39. }
  40. }
  41. }

第三步:运行PlayGame类;

在这里插入图片描述

可以看出效果和硬编码new创建对象是一个效果。

发表评论

表情:
评论列表 (有 0 条评论,303人围观)

还没有评论,来说两句吧...

相关阅读

    相关 反射创建对象到Unsafe

    前言 Java中,最常用的就是通过new调用相应构造器来创建对象实例,而当构造器不是public,而是private,new没了用武之地,我们又该怎样创建对象实例?