码迷,mamicode.com
首页 > 编程语言 > 详细

Java--Reflect(反射)专题5——方法反射的基本操作

时间:2015-06-22 11:11:54      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:反射   java   

转载请注明http://blog.csdn.net/uniquewonderq

1.如何获取某个方法

方法的名称和方法的参数列表才能唯一决定某个方法

2.方法的反射操作

method.invoke(对象,参数列表)

1.获取一个方法就是获取类的信息,获取类的信息,首先要获取类的类类型

 2.获取方法名称和参数列表来决定
            getMethod获取的是public的方法
            getDeclaredMethod获取所有声明的方法

<span style="font-size:18px;">package com.test;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author wonderq
 */
public class MethodReflect {
    public static void main(String[] args)  {
        //获取print方法,但是有两个,这里获取print(int ,int)
        //1.获取一个方法就是获取类的信息,获取类的信息,首先要获取类的类类型。
        A a1=new A();
        Class c=a1.getClass();
        try {
            /*
            2.获取方法名称和参数列表来决定
            getMethod获取的是public的方法
            getDeclaredMethod获取所有声明的方法
            */
            Method m=c.getMethod("print", int.class,int.class);//第二个参数是变参
            //方法的反射操作;
           // a1.print(10, 20);方法的反射操作是用m对象来进行方法调用和a1.print调用的效果是一样的
            //方法如果没有返回值,返回null,有返回值返回具体的返回值
            //Object o=m.invoke(a1, new Object[]{10,20});
            Object o=m.invoke(a1, 10,20);
            System.out.println("=========================");
            //获取方法print(string,string)的对象
            Method m1=c.getMethod("print", String.class,String.class);
            //对方法进行反射操作。
            //a1.print("hello","world");
            o=m1.invoke(a1, "hello","WORld");//与上述效果一致
            System.out.println("=========================");
            Method m2=c.getMethod("print");//这个时候第二个参数,没有,那么就不传,变参可以为空
            m2.invoke(a1);
        } catch (NoSuchMethodException ex) {
            ex.printStackTrace();
        } catch (SecurityException ex) {
            ex.printStackTrace();
        } catch (IllegalAccessException ex) {
            Logger.getLogger(MethodReflect.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalArgumentException ex) {
            Logger.getLogger(MethodReflect.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvocationTargetException ex) {
            Logger.getLogger(MethodReflect.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
}
class A{
    public void print(){
        System.out.println("helloworld!");
    }
    public void print(int a,int b){
        System.out.println("a+b="+(a+b));
    }
    public void print(String a,String b){
        System.out.println(a.toUpperCase()+","+b.toLowerCase());
    }
}</span>

输出结果:

run:
a+b=30
=========================
HELLO,world
=========================
helloworld!

这就是获取方法对象,然后用方法对象进行反射操作。

Java--Reflect(反射)专题5——方法反射的基本操作

标签:反射   java   

原文地址:http://blog.csdn.net/uniquewonderq/article/details/46591635

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!