Java--反射(四)方法反射的基本操作

只有得到方法的名称和参数才能唯一决定方法

class A{

    public void print(){
        System.out.println("Hello CSDN!");
    }
    public void print(int a, int b){
        System.out.println(a+b);
    }

    public void print(String a, String b){
     System.out.println(a.toUpperCase()+","+b.toLowerCase());
    }

}


已知有一个类A,A中三个不同参数的print方法,如何采用反射机制调用print方法呢?

1、先获取A的类类型,因为类类型有A类中的全部信息。

A a= new A();
Class c= a.getClass();

2、调用Class.getMethod()方法,获取方法对象,这一步需要知道该方法的名称和参数。此处若找不到方法会抛出NoSuchMethodException异常

Method m1 = c.getMethod("print",new Class[]{int.class,int.class});//获取第二个print方法
Method m2= c.getMethod("print",int.class,int.class);//获取第二个print方法
// m1==m2

3、调用方法。使用Method.invoke(Object obj, Object… args) 此处若参数不对或对象不对,则会抛出IllegalAccessException或InvocationTargetException异常

//如果方法有返回值, 返回返回值; 如果没有,则返回NULL
Object o1 = m1.invoke(a,10,20);
Object o2=m1.invoke(a,new Object[]{10,20});
//o1==o2

注:若要实现获取第一个print方法(无参方法),则可以使用以下形式

Method m1 = c.getMethod("print",new Class[]{});
//Method m2 = c.getMethod("print");
Object o1 = m1.invoke(a,new Object[]{});
//Object o1 = m1.invoke(a);





以上大部分内容来源于慕课网的”反射——Java高级开发必须懂的”课程,网址是http://www.imooc.com/learn/199,感谢Cedar老师的辛勤付出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值