java 反射之操作靜態Method

weixin_34208283發表於2018-05-05
3711017-8d8f754e39b36a70.jpg
null1524401983342.jpg

一張來自非洲的微笑,一首百聽不厭的老歌,還有每天穿梭在網路間的各位老鐵們,上節我們講了反射的Method,遺漏了點東西,在這裡將它補上,若我們利用反射呼叫靜態方法時又如何呢?

利用反射呼叫靜態方法

我們知道,靜態方法不屬於任何物件,只屬於類本身,直接上程式碼

程式碼示例 :
3711017-48837c8d7d9af408.png
QQ截圖20180505111426.png

這是我定義的一個Person類,並定義一個靜態方法,我們來看測試程式碼:

測試程式碼:
3711017-572d3eff2a1fd7bb.png
QQ截圖20180505111555.png

3711017-bea1598c0f2f0459.png
QQ截圖20180505111636.png

3711017-724af1884aa001e8.png
QQ截圖20180505111907.png

以上是我們程式碼的測試和結果,最後一張截圖是API中method類中的invoke的官方解釋,允許我們將obj引數設定為null,前提是該方法是靜態方法。
接下來我們來看看利用反射呼叫陣列的可變引數,直接上程式碼:

程式碼如下:
class emp {
public static void work(int...arr){
    System.out.println(Arrays.toString(arr));
 }
 public static void work(String ...arr) {

   System.out.println(Arrays.toString(arr));
   }
}

上述程式碼中,我們通過建立emp類,並建立了兩個靜態的可變引數的方法,來看測試程式碼:

程式碼如下:
     利用反射呼叫陣列引數(可變引數)
     public class StaticMethodDemo {
     public static void main(String[] args)throws Exception {
     若陣列為基本資料型別
     Class<emp> clazz = emp.class;
    Method method = clazz.getDeclaredMethod("work", int[].class);
    method.invoke(null,new int[]{1,2,3,4,5});

    若陣列為引用型別
    Method method1 = clazz.getMethod("work", String[].class);
    將它包裝成一個 Object[]陣列
   method1.invoke(null,new Object[]{new String[]{"A","b","C"}});

  }
結果如下:
3711017-8eff9c2e282b219f.png
QQ截圖20180505173843.png

這就是我們利用反射來操作靜態方法,以及陣列的可變引數基本過程。

相關文章