[Java反射基礎三]方法反射的基本操做

 

本文接上文「獲取類的信息」,利用反射(invoke)來獲取一個類中的方法來執行。html

一、定義一個類,包含三個名稱相同,參數不一樣的方法java

 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 }

二、利用方法的反射(invoke)分別獲取該類三個方法並執行ide

 1 public class Test {
 2     public static void main(String[] args) {
 3         /**
 4          * 獲取print(int,int)方法
 5          * 一、獲取類的類類型
 6          */
 7         A a1 = new A();
 8         Class clazz = a1.getClass();
 9         /**
10          * 二、獲取方法(名稱、參數列表)
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 }

三、完整代碼spa

 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          * 一、獲取類的類類型
13          */
14         A a1 = new A();
15         Class clazz = a1.getClass();
16         /**
17          * 二、獲取方法(名稱、參數列表)
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

四、執行結果code

相關文章
相關標籤/搜索