以前,我们调用一个类里面的方法,通常通过对象名来进行操作。今天我们通过反射机制来调用类里面的方法,包括私有的方法也可以调用。
1 package com.example.Reflect; 2 3 import java.lang.reflect.InvocationTargetException; 4 import java.lang.reflect.Method; 5 6 public class MethodDemo1 { 7 public static void main(String[] args) { 8 A a = new A(); 9 Class c1 = a.getClass(); 10 /** 11 * 通过getMethod 12 */ 13 try { 14 /**获得print(int , int)方法 15 * 16 */ 17 //Method method = c1.getMethod("print", new Class[]{int.class, int.class}); 18 Method method = c1.getMethod("print", int.class, int.class); 19 /** 20 * 如果方法返回值类型为空的话,则下面的调用返回的值null 21 * 否则返回的是Object的对象 22 */ 23 //Object invoke = method.invoke(a, new Object[]{10, 20}); 24 Object invoke = method.invoke(a, 10, 20); 25 26 /** 27 * 获得print()方法 28 */ 29 //method = c1.getMethod("print"); 30 method = c1.getMethod("print", new Class[]{}); 31 //method.invoke(a); 32 method.invoke(a, new Object[]{}); 33 } catch (NoSuchMethodException | SecurityException e) { 34 // TODO Auto-generated catch block 35 e.printStackTrace(); 36 } catch (IllegalAccessException e) { 37 // TODO Auto-generated catch block 38 e.printStackTrace(); 39 } catch (IllegalArgumentException e) { 40 // TODO Auto-generated catch block 41 e.printStackTrace(); 42 } catch (InvocationTargetException e) { 43 // TODO Auto-generated catch block 44 e.printStackTrace(); 45 } 46 47 } 48 } 49 class A 50 { 51 public void print() 52 { 53 System.out.println("hello world"); 54 } 55 public void print(int a, int b) 56 { 57 System.out.println(a + b); 58 } 59 public void print(String a, String b) 60 { 61 System.out.println(a + ", " + b); 62 } 63 }
时间: 2024-10-16 14:34:35