Java 方法的反射

方法的反射 (1)如何获取某个方法 方法的名称和参数列表才能唯一确定某个方法 (2)方法反射放操作 method.invokw(对象,参数列表);   看下面这个 demo
  1. package practice.Reflect;
  2. import java.lang.reflect.Method;
  3. /**
  4.  * @Author: 言曌
  5.  * @Date: 2017/11/17
  6.  * @Time: 上午9:36
  7.  */
  8. public class MethodDemo1 {
  9.     public static void main(String args[]) {
  10.         //要获取print(int,int)方法
  11.         //1、要获取一个方法就是获取类的信息,要获取类的信息首先要获取类的类类型
  12.         A a1 = new A();
  13.         Class c = a1.getClass();
  14.         /**
  15.          * 2、获取方法  名称和参数列表来决定
  16.          * getMethod()获取的是public的方法
  17.          * getDelcaredMethod()自己声明的方法
  18.          */
  19.         try {
  20.             //写法一
  21. //            Method m = c.getMethod("print",new Class[]{int.class,int.class});
  22.             //写法二
  23.             Method m = c.getMethod("print",int.class,int.class);
  24.             //之前的操作,非方法的反射
  25.             a1.print(10,20);
  26.             //方法的反射操作,和上面a1.print效果完全相同
  27.             //方法如果没有返回值,返回null,有返回值返回具体的返回值
  28.             //写法一
  29.             m.invoke(a1,new Object[]{10,20});
  30.             //写法二
  31.             m.invoke(a1,10,20);
  32.             System.out.println("----------------------------");
  33.             //获取方法print(String,String)
  34.             Method m1 = c.getMethod("print",String.class,String.class);
  35.             //用方法进行反射操作
  36.             m1.invoke(a1,"hello","world");
  37.             System.out.println("----------------------------");
  38.             //获取方法print()
  39.             Method m2 = c.getMethod("print");
  40.             //用方法进行反射
  41.             m2.invoke(a1);
  42.         } catch (Exception e) {
  43.             e.printStackTrace();
  44.         }
  45.     }
  46. }
  47. class A {
  48.     public void print() {
  49.         System.out.println("Hello World");
  50.     }
  51.     public void print(int a,int b) {
  52.         System.out.println(a+b);
  53.     }
  54.     public void print(String a,String b) {
  55.         System.out.println(a.toUpperCase()+","+b.toLowerCase());
  56.     }
  57. }
  在 A 类中有三个方法,同名但是参数不同。 平时我们要调用他们只需要 A a1 = new A(); a1.print(10,20);即可 现在我们通过反射的方式 先要获取类的类类型,然后再获取的其指定的方法 A a1 = new A(); Class c = obj.getClass(); Method m = c.getMethod("print",int.class,int.class); m.invoke(a1); 通过反射的方式得到的结果和 a1.print() 方式是一样的。    

发表评论

目前评论:1