1. 程式人生 > >Java中通過method對象來調用方法

Java中通過method對象來調用方法

ring demo1 rac body test 示例 進行 pos exc

 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.獲取方法 名稱和參數列表來決定 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 }

Java中通過method對象來調用方法