通過反射,調用類中的方法


通過反射調用類中的方法,具體實現起來要注意兩點:

(1)通過 Class 類的 getMethod 方法取的 Method 對象,並設置調用方法時需要的參數類型。

(2)使用 Method 方法調用 invoke 方法,並向該方法傳遞參數,其參數通常是一個類的對象。

個人總結,大致需要以下四個步驟:

1. 獲取當前類的Class對象。              (通過forName()動態加載類)

2. 實例化這個Class對象。                (通過newInstance:  Object obj=student.newInstance() )

3. 獲取當前類的某個(些)方法

4用   方法對象名.invoke ,通過Class對象的實例,調用帶相應參數的,當前類的方法。

代碼如下:

******************學生類****************

類里面有兩個方法,一個帶參數,一個不帶參數

 1 package zj4_6;
 2 
 3 import java.lang.reflect.InvocationTargetException;
 4 
 5 public class Student {
 6     public void printInfo(){
 7         System.out.println("打印學生信息");
 8     }
 9     public void printAddress(String address){
10         System.out.println("hellow,I come from "+address);
11         
12     }
13 }

***********************主函數類***************************
調用Student類中的兩個方法
 1 package zj4_6;
 2 
 3 import java.lang.reflect.InvocationTargetException;
 4 import java.lang.reflect.Method;
 5 
 6 public class InvokeMethod1 {
 7 
 8     /**
 9      * 通過反射,調用類中的方法
10      * @throws SecurityException 
11      * @throws NoSuchMethodException 
12      * @throws InstantiationException 
13      * @throws InvocationTargetException 
14      * @throws IllegalArgumentException 
15      * @throws IllegalAccessException 
16      */
17     public static void main(String[] args) throws Exception {
18         try {
19             Class student=Class.forName("zj4_6.Student");//動態加載類,獲取當前類的Class對象
20             //獲取Student類名稱為printinfo地方法
21             Method methods1=student.getMethod("printInfo");
22             //調用frintInfo方法
23             methods1.invoke(student.newInstance()); //通過實例化的對象,調用無參數的方法 24             //獲取類中名稱為printInfo地方法,String,class是參數類型
25             Method methods2=student.getMethod("printAddress", String.class);//注意參數不是String
26             //調用printAddress方法,其中HK是方法傳入的參數值
27             methods2.invoke(student.newInstance(),"HK");//通過對象,調用有參數的方法
28 } catch (ClassNotFoundException e) { 29  e.printStackTrace(); 30  } 31  } 32 }

運行結果如下:
 
         

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM