反射创建对象

第一步

将对象的路径存到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();
		}
	}
}

第三步:运行PlayGame类;

在这里插入图片描述

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,可以使用反射机制创建对象,具体步骤如下: 1. 获取要创建对象的类的Class对象,可以使用Class.forName()方法或者直接使用类名.class。 2. 使用Class对象的newInstance()方法创建对象,该方法会调用类的默认构造方法创建对象。如果类没有默认构造方法,可以使用getConstructor()方法获取指定的构造方法,并使用Constructor对象的newInstance()方法创建对象。 示例代码如下: ``` // 获取要创建对象的类的Class对象 Class<MyClass> clazz = MyClass.class; // 使用Class对象的newInstance()方法创建对象 MyClass obj1 = clazz.newInstance(); // 获取指定的构造方法 Constructor<MyClass> constructor = clazz.getConstructor(String.class); // 使用Constructor对象的newInstance()方法创建对象 MyClass obj2 = constructor.newInstance("paramValue"); ``` 需要注意的是,newInstance()方法在Java 9及以上版本已经标记为过时,推荐使用getDeclaredConstructor()和setAccessible()方法创建对象。示例代码如下: ``` // 获取要创建对象的类的Class对象 Class<MyClass> clazz = MyClass.class; // 获取指定的构造方法 Constructor<MyClass> constructor = clazz.getDeclaredConstructor(String.class); // 设置构造方法可访问 constructor.setAccessible(true); // 使用Constructor对象的newInstance()方法创建对象 MyClass obj3 = constructor.newInstance("paramValue"); ``` 需要注意的是,使用反射创建对象会降低程序的性能,因此建议只在必要时使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值