1.穿過。類的類屬性。
2.通過類實例的getClass()方法獲得。
3.通過Class.forName(字符串類名)的方法獲得。
比如現在包下有壹個類計算器。
公共?班級?計算器{
公共?雙倍?加(雙倍?score1,雙?得分2){
回歸?score1?+?score2
}
公共?作廢?print(){
system . out . println(" OK ");
}
公共?靜電?雙倍?mul(double?score1,雙?得分2){
回歸?score1?*?score2
}
}公?班級?計算器測試?{
公共?靜電?作廢?main(String[]?args)?摔投?例外?{
//通過。類的class屬性。
Class & lt計算器& gt?clz?=?Calculator.class
//或者通過類的完整路徑獲取。此方法將引發ClassNotFoundException,因為它無法確定傳遞的路徑是否正確。
//Class & lt;計算器& gt?clz?=?Class.forName("test。計算器”);
//或者new,然後通過實例的getClass()方法獲取。
//計算器?s?=?新的?計算器();
//Class & lt;計算器& gt?clz?=?s . getclass();
//1.?獲取類中帶有方法簽名的mul方法。getMethod的第壹個參數是方法名,第二個參數是mul的參數類型數組。
方法?方法?=?clz.getMethod("mul ",新的?Class[]{double.class,double . class });
//調用?方法的第壹個參數是被調用的對象,這裏是靜態方法,所以為null,第二個參數是傳遞給要調用的方法的參數。
對象?結果?=?method.invoke(null,新的?Object[]{2.0,2.5 });
//如果方法mul是private私有方法,按照上述方法調用會產生異常,此時必須改變其access屬性。
//method . set accessible(true);//私有方法可以通過傳輸來修改它們的訪問權限。
System.out.println(結果);//結果是5.0。
//2.?獲取類中的非靜態方法。
方法?方法_2?=?clz.getMethod("add ",新的?Class[]{double.class,double . class });
//這是必須在對象上執行的實例方法。
對象?結果_2?=?method_2.invoke(新?計算器(),?新的?Object[]{2.0,2.5 });
system . out . println(result _ 2);//4.5
//3.?獲取不帶方法簽名的方法print。
方法?方法_3?=?clz.getMethod("print ",新的?class[]{ });
對象?結果_3?=?method_3.invoke(新?計算器(),?null);//result_3為null,此方法不返回結果。
}
}