反射

方法的反射
1、如何获取某个方法
方法的名称和方法的参数列表才能唯一决定某个方法

2、方法反射的操作
method.invoke(对象,参数列表)

public class MethodDemo1 {
    public static void main(String[] args) {
        /**思考:如何获得方法对象,然后用方法对象进行反射操作
         * 1、要获取一个方法首先要获取类的信息,获取类的信息首先要获取类的类类型
         * 2、获取方法必须要有名称和参数列表来决定
         */
        //1、首先要获取类的信息,获取类的信息首先要获取类的类类型
        A a1=new A();
         Class c = a1.getClass();
         
        /*2、获取方法 名称和参数列表来决定
         * getMethod获取的是public的方法
          * getDeclaredMethod()获取自己声明的方法
          */
        try {
             //获取print(int,int)方法.
             System.out.println("=================获取print(int,int)===============");
            //这个一定会抛出异常,我们这里简单的处理一下异常,原因:万一这个方法(带两个整型参数的方法)不存在呢
             Method method = c.getMethod("print", new Class[]{int.class,int.class});//这个方法中“...”代表可变参数,当有几个参数的时候,可以new Class数组
            //也可以这样写:有几个参数就传几个参数
             Method method2 = c.getMethod("print", int.class,int.class);
             a1.print(10, 20);//普通调用(可以理解为a1这个对象操作方法对象print)
             /*方法的反射操作是用method/method2对象来进行方法调用 和a1.print()调用的效果完全相同
             *方法如果没有返回值,返回null。有返回值就返回具体的返回值如下面的Object o
              */
            Object o = method.invoke(a1, new Object[]{10,20});//方法的反射(可以理解为print这个方法对象,即method/method2来操作a1,即上面普通调用反过来操作,通过invoke来进行操作)
             //也可以这样:
            Object o1 = method.invoke(a1, 10,20);
            
            
            
             System.out.println("=================获取print(String,String)===============");
             //获取方法print(String,String)
            Method method3 = c.getMethod("print", String.class,String.class);
            a1.print("hello", "world");//普通调用
             //对方法进行反射操作
            Object o2 = method3.invoke(a1, "hello","world");
            
            
            
            
             System.out.println("=================获取print()无参方法===============");
 //            Method method4 = c.getMethod("print", new Class[]{});
             Method method5 = c.getMethod("print");//没有参数就不传
 //            method5.invoke(a1, new Object[]{});
             method5.invoke(a1);
         }catch (Exception e) {
             e.printStackTrace();
         }
     }
 }
 
 class A{
     public void print(){
        System.out.println("hello world");
     }
     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.toUpperCase());
     }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值