java 27 - 5 反射之 通過反射獲取成員方法並使用


類Method:提供關於類或接口上單獨某個方法(以及如何訪問該方法)的信息。

 

A:獲取所有方法 數組

 

  1、getMethods  獲取該類包括其父類的公共成員方法

  2、getDeclaredMethods  獲取該類的所有的成員方法

B:獲取單個方法

  1、getMethod 獲取該類所有的公共類單個成員方法

  2、getDeclaredMethod 獲取該類所有類型的單個成員方法

 

 

A.1:獲取該類包括其父類的公共成員方法 

        //獲取字節碼文件        
        Class c = Class.forName("zl_Relfect_01.Person");
        
        //獲得該類與父類的所有的公共成員方法
        Method[] m1 = c.getMethods();
        for(Method m : m1){
            System.out.println(m);
        }

 

A.2:getDeclaredMethods  獲取該類的所有的成員方法

1         //獲取字節碼文件        
2         Class c = Class.forName("zl_Relfect_01.Person");
3         //獲取該類的所有類型的成員方法
4         Method[] m1 = c.getDeclaredMethods();
5         for(Method m : m1){
6             System.out.println(m);
7         }

 

B:獲取單個成員方法:

 1         //獲取字節碼文件        
 2         Class c = Class.forName("zl_Relfect_01.Person");
 3      //無參構造創建對象
 4         Constructor con = c.getConstructor();
 5         Object obj = con.newInstance();
 6         
 7         //獲取該類單個無參無返回值公共類型的成員方法  8         //無參的成員方法,只需寫成員方法的名稱
 9         Method m1 = c.getMethod("show");
10         // public Object invoke(Object obj,Object... args) 返回值是Object接收,第一個參數表示對象是誰,第二參數表示調用該方法的實際參數
11         //show是無參,無返回值構造
12         m1.invoke(obj);//調用Person類的show方法
13         
14         
15         //獲取該類單個有參有返回值公共類型的成員方法
16         Method m2 = c.getMethod("method", String.class);
17         //沒有返回值
18         m2.invoke(obj, "哈嘍");////調用Person類的method方法
19         
20         //獲取該類單個有參有返回值公共類型的成員方法
21         Method m3 = c.getMethod("getString", String.class,int.class);
22         //有返回值, public Object invoke(Object obj,Object... args) 返回值是Object接收
23         Object ob1 = m3.invoke(obj, "哈嘍",123);
24         System.out.println(ob1);
25         
26         //獲取該類單個 無參無返回值的私有成員方法
27         Method m4 = c.getDeclaredMethod("function");
28         //取消語言訪問檢查
29         m4.setAccessible(true);
30         //調用Person類的function方法
31         m4.invoke(obj);

 


免責聲明!

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



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