正常來說,我們調用對象的方法是通過dot運算符來進行的,這里我們介紹另一種方法,有以下幾個步驟:1,獲取該類的Class Type;2,通過getMethod方法獲取Method對象;3,通過調用invoke方法來執(zhí)行對象的某個方法;這里要特別注意下getMethod方法和invoke方法的參數(shù),見下面的例子 1 package reflectTest; 2 3 import java.lang.reflect.Method; 4 5 /** 6 * 通過獲取類類型,進而獲取Method對象,進而調用類的方法, 7 * 和直接通過類的對象來調用方法可以達到一樣的效果,這里的示例調用了對象的三個方法 8 * @author Wang 9 * 10 */ 11 public class MethodDemo1 { 12 public static void main(String[] args) { 13 14 // 1.要獲取一個方法就是獲取類的信息,獲取類的信息首先要獲取類的類類型,要獲取print(int ,int )方法 15 A a1 = new A(); 16 Class c = a1.getClass(); 17 18 // 2.獲取方法 名稱和參數(shù)列表來決定 getMethod獲取的是public的方法 getDelcaredMethod自己聲明的方法 19 try { 20 System.out.println("==================調用print(int a, int b)方法"); 21 // Method m = c.getMethod("print", new Class[]{int.class,int.class}); 22 Method m = c.getMethod("print", int.class, int.class); 23 // 方法的反射操作 24 // a1.print(10, 20);方法的反射操作是用m對象來進行方法調用 和a1.print調用的效果完全相同 25 // 方法如果沒有返回值返回null,有返回值返回具體的返回值 26 // Object o = m.invoke(a1,new Object[]{10,20}); 27 Object o = m.invoke(a1, 10, 20); 28 29 30 System.out.println("==================調用print(String a, String b)方法"); 31 32 33 // 獲取方法print(String,String) 34 Method m1 = c.getMethod("print", String.class, String.class); 35 // 用方法進行反射操作 36 // a1.print("hello", "WORLD"); 37 o = m1.invoke(a1, "hello", "WORLD"); 38 39 40 System.out.println("===================調用無參的print方法"); 41 42 43 // Method m2 = c.getMethod("print", new Class[]{}); 44 Method m2 = c.getMethod("print"); 45 // m2.invoke(a1, new Object[]{}); 46 m2.invoke(a1); 47 48 49 } catch (Exception e) { 50 // TODO Auto-generated catch block 51 e.printStackTrace(); 52 } 53 54 } 55 } 56 57 class A { 58 public void print() { 59 System.out.println("helloworld"); 60 } 61 62 public void print(int a, int b) { 63 System.out.println(a + b); 64 } 65 66 public void print(String a, String b) { 67 System.out.println(a.toUpperCase() + "," + b.toLowerCase()); 68 } 69 }
|
|