反射应用:动态的调用方法

在运行时可以调用任意对象的任意方法

  • Method:
  • invoke(对象,实参列表)

步骤:

  • (1)获取Class对象
  • (2)得到方法Method对象
public class Test09Method {
	@Test
	public void test01()throws Exception{
		//(1)获取Class对象:四种方式之一
		Class clazz = Class.forName("com.atguigu.ext.demo.AtGuiguDemo");
		
		//(2)得到方法Method对象
		//例如:得到void setInfo(String info)方法
		/*
		 * (1)Method clazz.getMethod(name, parameterTypes):得到公共的方法
		 * (2)Method clazz.getDeclaredMethod(name, parameterTypes):得到声明的方法
		 * 一个类中方法是可能重载,如何定位到某一个方法    方法名 + 形参列表
		 */
		Method method = clazz.getDeclaredMethod("setInfo", String.class);
		
		//(3)调用方法
		/*
		 * 静态方法:
		 * 		类名.方法(【实参列表】)
		 * 非静态方法
		 * 		对象名.方法(【实参列表】)
		 */
		//①创建对象
		Object obj = clazz.newInstance();
		//②调用方法
		method.invoke(obj, "hahaha");
		
		System.out.println(obj);
		
//		(4)获取public static void test(int a)
		Method testMethod = clazz.getDeclaredMethod("test", int.class);
		//调用方法
		testMethod.invoke(null, 10);//如果obj位置传入null,表示调用静态方法
	}
}

编写AtGuiguDemo

public class AtGuiguDemo implements Serializable,Comparable<AtGuiguDemo> {
	private static final long serialVersionUID = 1L;
	private int id;
	private String info;
	private int num;
	public AtGuiguDemo(int id, String info, int num) {
		super();
		this.id = id;
		this.info = info;
		this.num = num;
	}
	
	public AtGuiguDemo() {
		super();
	}

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	@Override
	public String toString() {
		return "AtGuiguDemo [id=" + id + ", info=" + info + ", num=" + num + "]";
	}
	@Override
	public int compareTo(AtGuiguDemo o) {
		
		return 0;
	}
	//编译没有及时更新,为了兼容老版本的代码
/*	@Override
	public int compareTo(Object o) {
		
		return 0;
	}*/
	
	public static void test(int a){
		System.out.println("a = " + a);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值