java.lang.reflect.Method


java.lang.reflect.Method

一、Method類是什么
  Method是一個類,位於java.lang.reflect包下。
  在Java反射中 Method類描述的是 類的方法信息,通俗來講 有一個類如下:

 1 package com.testReflect;
 2 
 3 public class MethodDemo {
 4     private int num = 2;
 5     private String str = "xixi";
 6     
 7     public int addResult(int addNum){
 8         return num + addNum;
 9     }
10     
11     @Override
12     public String toString() {
13         return "MethodDemo [num=" + num + ", str=" + str + "]";
14     }
15 }

  在Java反射中MethodDemo類中的方法addResult(int addNum)、toString()都是Method類的實例,這個Method類的實例描述了方法的全部信息。(包括:方法修飾符、方法名稱、參數列表 等等)

二、如何獲取Method類對象
  一共有4種方法,全部都在Class類中:
    - getMethods(): 獲得類的public類型的方法
    - getMethod(String name, Class[] params): 獲得類的特定方法,name參數指定方法的名字,params參數指定方法的參數類型
    - getDeclaredMethods(): 獲取類中所有的方法(public、protected、default、private)
    - getDeclaredMethod(String name, Class[] params): 獲得類的特定方法,name參數指定方法的名字,params參數指定方法的參數類型

三、Method類常用方法
  對於類中的方法,我們常用的操作:調用方法。

 1 package com.testReflect;
 2 import java.lang.reflect.Method;
 3 import java.lang.reflect.Modifier;
 4 public class MethodTest {
 5     public static void main(String[] args) throws Exception {
 6         //使用反射第一步:獲取操作類MethodDemoFieldDemo所對應的Class對象
 7         Class<?> cls = Class.forName("com.testReflect.MethodDemo");
 8         //使用MethodDemo類的class對象生成 實例
 9         Object obj = cls.newInstance();
10         
11         //獲取public int addResult(int addNum)方法
12         Method addMethod = cls.getMethod("addResult", new Class[]{int.class});
13         System.out.println("修飾符: " + Modifier.toString(addMethod.getModifiers()));
14         System.out.println("返回值: " + addMethod.getReturnType());
15         System.out.println("方法名稱: " + addMethod.getName());
16         System.out.println("參數列表: " + addMethod.getParameterTypes());
17         int result = (int)addMethod.invoke(obj, 2);
18         System.out.println("調用addResult后的運行結果:" + result);
19         
20         System.out.println("--------------------------------");
21         
22         //獲取public String toString() 方法
23         Method toStringMethod = cls.getMethod("toString", new Class[]{});
24         System.out.println("修飾符: " + Modifier.toString(toStringMethod.getModifiers()));
25         System.out.println("返回值: " + toStringMethod.getReturnType());
26         System.out.println("方法名稱: " + toStringMethod.getName());
27         System.out.println("參數列表: " + toStringMethod.getParameterTypes());
28         String msg = (String)toStringMethod.invoke(obj);
29         System.out.println("調用toString后的運行結果:" + msg);
30     }
31 }

  Method類的invoke(Object obj,Object args[])方法接收的參數必須為對象,如果參數為基本類型數據,必須轉換為相應的包裝類型的對象。invoke()方法的返回值總是對象,如果實際被調用的方法的返回類型是基本類型數據,那么invoke()方法會把它轉換為相應的包裝類型的對象,再將其返回.

 


免責聲明!

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



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