本文接上文「獲取類的信息」,利用反射(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 }
四、執行結果code