Java 方法的反射

avatar 2017年11月17日10:22:13 5 2052 views
博主分享免费Java教学视频,B站账号: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() 方式是一样的。



  • 微信
  • 交流学习,资料分享
  • weinxin
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0