
public static void invoke(){ //獲取class對象 Class clazz = Class.forName("cn.ph.test.UserDao"); //獲取對象方法 Method[] mds = clazz.getMethods(); //遍歷 for (Method md : mds) { /** *@MyTest.class 注解碼對象 *invake(Object obj,Object...args) */ if (md.isAnnotationPresent(MyTest.class)) { //如果當前的方法上有自定義MyTest注解,執行,否則忽略 md.invoke(new UserDao());//方法對應的類 } /* //getMethod第一個參數是方法名,第二個參數是該方法的參數類型(多個用,隔開), Method method = clazz.getMethod("test", String.class); //Method類的invoke(Object obj,Object args[])方法接收的參數必須為對象, //如果參數為基本類型數據,必須轉換為相應的包裝類型的對象。invoke()方法的返回值總是對象, //如果實際被調用的方法的返回類型是基本類型數據,那么invoke()方法會把它轉換為相應的包裝類型的對象, //再將其返回 String s = "aa"; method.invoke(m,(Object)s);//報錯時候,參數記得強轉Object */ } }
**注意:**
>1、getMethods返回一個包含某些 Method 對象的數組,這些對象反映此 Class 對象所表示的類或接口的公共 member 方法。
>2、getDeclaredMethods返回 Method 對象的一個數組,這些對象反映此 Class 對象表示的類或接口聲明的所有方法,包括公共、保護、默認(包)訪問和私有方法,但不包括繼承的方法。
**也就是說getDeclaredMethods能拿到所有(不包括繼承的方法),而getMethods只能拿到public方法(包括繼承的類或接口的方法),其他方法也是同理的:**