public class ThirdActivity extends AppCompatActivity {
...
static public class MyTest{
public MyTest(){}
public void test(){
//注意這裏不能使用logi,這是android的庫,main調試的時候使用的是java的庫
System.out.println("Call NoParam test");
}
public void test(String val){
//注意這裏不能使用logi,這是android的庫,main調試的時候使用的是java的庫
System.out.println("Call Param test,param:"+val);
}
}
public static void main(String[] args) throws Exception {
Class myTestClass = MyTest.class;
//獲取無參test方法
Method mtest_noparam = myTestClass.getDeclaredMethod("test");
//獲取有參數test方法
Class[] program =new Class[]{String.class};
Method mtest = myTestClass.getDeclaredMethod("test",program);
//生成MyTest實例,注意MyTest必須是static的,因爲main是static,static不能直接訪問非static內部類
Object mytestObj = myTestClass.newInstance();
if(mtest_noparam != null){
try {
mtest_noparam.invoke(mytestObj);
mtest.invoke(mytestObj,"hellow word");
}
catch (Exception e){
e.printStackTrace();
}
}
}
}
調用Methon首先獲取Method。
-
通過Class獲取Method方法
- getDeclaredMethods:獲取所有聲明的方法(不包含父類方法)
- getDeclaredMethod:通過函數名稱+參數列表獲取聲明的方法(不包含父類方法)。具體demo見上述代碼
- getMethods:獲取該類的所有方法(包括父類方法)
- getMethods:通過函數名稱+參數列表獲取類的方法(包括父類方法)
-
Method 判斷是否是註解類方法
- getDeclaredAnnotations:獲取所有註解類的方法(不包含父類方法)
- getAnnotation:通過註解類名獲取註解類的方法(不包含父類方法)
- getAnnotations:獲取所有註解類的方法(包括父類方法)
- getAnnotation:通過註解類名獲取註解類的方法(包括父類方法)
-
Method 調用本身方法
- invoke:必須指定一個實例,因爲Method需要調用對應類實例的方法,類的非靜態方法屬於對象,不屬於類本身。