[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、执行结果

 

posted @ 2017-06-04 14:32  Format_all  阅读(435)  评论(0编辑  收藏  举报