反射(二)协同配置文件创建任意类的对象并执行任意方法

反射:通过反射和配置文件创建任意类的对象,并执行对象的任意方法

1.在包的同级创建File,作为配置文件
2.在配置文件中定义类名,方法名
3.使用该目标类的类加载器对配置文件资源加载到程序中并转为流
4.使用properties对象将该流加载到内存中
5.使用properities对象来获取配置文件的属性,内容为String
5.使用Class.forClass等加载出类对象,并通过获取构造器newInstance出实际对象
6.通过类对象加载出method,并调用invoke(实际对象)完成

1.在包的同级创建File,作为配置文件
	Day_8
		Calculate.java
	calu.properities
	
2.在配置文件中定义类名,方法名
	className = Day_8.Calculate
	methodName = add

3.使用同级包中任意一个类加载器对配置文件资源加载到程序中并转为流
	Properties properties = new Properties();
	ClassLoader classLoader = Day_1.Dog.class.getClassLoader();
	InputStream inStream = classLoader.getResourceAsStream("calu.properities");
	
4.使用properties对象将该流加载到内存中
	properties.load(inStream);
	
5.使用properities对象来获取配置文件的属性,内容为String
	String className = properties.getProperty("className");
	String methodName = properties.getProperty("methodName");
	
5.使用Class.forClass等加载出类对象,并通过获取构造器并newInstance出实际对象
	Class class1 = Class.forName(className);
	Constructor constructor = class1.getConstructor(String.class,int.class);
	Object object = constructor.newInstance("美团",11);
	
6.通过类对象加载出method,并调用invoke(实际对象)完成
	Method method = class1.getDeclaredMethod(methodName,int.class,int.class);
	System.out.println(method.invoke(object, 3,4));
	
	
附件:	

public class Calculate {
	private int a=5,b=3;
	private String name="helloWorld";
	public String ya = "a";
	public String ua = "a";
	public String ia = "a";
	public static int age = 10;
	
	public int add(int a,int b) {
		return a+b;
	}
	public int sub(int a,int b) {
		return a-b;
	}
	private String info() {
		return "it private func";
	}
	public Calculate(String name,int priority) {
		this.name = name;
		System.out.println(name+" is a priority "+priority+" calculator");
	}
	public Calculate(String name,String priority) {
		this(name,Integer.parseInt(priority));
	}
	
	public Calculate() {
		super();
	}
	@Override
	public String toString() {
		return "Calculate [a=" + a + ", b=" + b + ", name=" + name + ", ya=" + ya 
					+ ", ua=" + ua + ", ia=" + ia + "]";
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值