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 }