zoukankan      html  css  js  c++  java
  • [Java反射基础三]方法反射的基本操作

    本文接上文“获取类的信息”,利用反射(invoke)来获取一个类中的方法来执行。

    1、定义一个类,包含三个名称相同,参数不同的方法

     1 class A{
     2     public void print(){
     3         System.out.println("Hello,World");
     4     }
     5 
     6     public void print(int a,int b){
     7         System.out.println(a+b);
     8     }
     9     public void print(String a,String b){
    10         System.out.println(a.toUpperCase()+","+b.toLowerCase());
    11     }
    12 }

    2、利用方法的反射(invoke)分别获取该类三个方法并执行

     1 public class Test {
     2     public static void main(String[] args) {
     3         /**
     4          * 获取print(int,int)方法
     5          * 1、获取类的类类型
     6          */
     7         A a1 = new A();
     8         Class clazz = a1.getClass();
     9         /**
    10          * 2、获取方法(名称、参数列表)
    11          * getMethod()获取的是public方法
    12          * getDeclaredMethod()获取的是自己声明的方法
    13          */
    14         try {
    15 //            Method m = clazz.getMethod("print",new Class[]{int.class,int.class});
    16             Method m = clazz.getMethod("print", int.class, int.class);
    17             //方法的反射操作,用m对象进行方法调用,a1.print完全相同
    18             //方法没有返回值返回null,有返回值返回具体的返回值
    19 //            Object obj = m.invoke(a1,new Object[]{10,20});
    20             Object obj = m.invoke(a1,10,20);
    21 
    22             System.out.println("================================================");
    23 
    24             Method m2 = clazz.getMethod("print", String.class, String.class);
    25             m2.invoke(a1,"aaa","BBB");
    26 
    27             System.out.println("================================================");
    28 
    29             Method m3 = clazz.getMethod("print");
    30             m3.invoke(a1);
    31         } catch (Exception e) {
    32             e.printStackTrace();
    33         }
    34     }
    35 }

    3、完整代码

     1 package com.format.test;
     2 
     3 import java.lang.reflect.Method;
     4 
     5 /**
     6  * Created by Format on 2017/6/3.
     7  */
     8 public class Test {
     9     public static void main(String[] args) {
    10         /**
    11          * 获取print(int,int)方法
    12          * 1、获取类的类类型
    13          */
    14         A a1 = new A();
    15         Class clazz = a1.getClass();
    16         /**
    17          * 2、获取方法(名称、参数列表)
    18          * getMethod()获取的是public方法
    19          * getDeclaredMethod()获取的是自己声明的方法
    20          */
    21         try {
    22 //            Method m = clazz.getMethod("print",new Class[]{int.class,int.class});
    23             Method m = clazz.getMethod("print", int.class, int.class);
    24             //方法的反射操作,用m对象进行方法调用,a1.print完全相同
    25             //方法没有返回值返回null,有返回值返回具体的返回值
    26 //            Object obj = m.invoke(a1,new Object[]{10,20});
    27             Object obj = m.invoke(a1,10,20);
    28 
    29             System.out.println("================================================");
    30 
    31             Method m2 = clazz.getMethod("print", String.class, String.class);
    32             m2.invoke(a1,"aaa","BBB");
    33 
    34             System.out.println("================================================");
    35 
    36             Method m3 = clazz.getMethod("print");
    37             m3.invoke(a1);
    38         } catch (Exception e) {
    39             e.printStackTrace();
    40         }
    41     }
    42 }
    43 
    44 class A{
    45     public void print(){
    46         System.out.println("Hello,World");
    47     }
    48 
    49     public void print(int a,int b){
    50         System.out.println(a+b);
    51     }
    52     public void print(String a,String b){
    53         System.out.println(a.toUpperCase()+","+b.toLowerCase());
    54     }
    55 }
    View Code

    4、执行结果

  • 相关阅读:
    Asp.net2.0页面执行顺序
    [转帖]常用的SQL语句
    [转帖]黑客技术经典问题FAQ
    面试的一些心得
    较全的正则表达式
    很好的创业建议
    [转帖]如何让菜单项与工具栏按钮对应
    源码下载网站
    [转帖]一段测试代码
    GOF设计模式趣解(23种设计模式) <转自百度空间>
  • 原文地址:https://www.cnblogs.com/format-ch/p/6940460.html
Copyright © 2011-2022 走看看