首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 反射調用靜態方法實戰:以 Math.abs 為例

     編輯:Java 相關知識

核心技巧

反射調用靜態方法時,Method.invoke(Object obj, Object... args) 的第一個參數 傳入 null 即可,因為靜態方法不依賴實例。

完整代碼示例

import java.lang.reflect.Method;

public class StaticReflectionDemo {
    public static void main(String[] args) throws Exception {
        // 1. 獲取 Class 對象
        Class mathClass = Class.forName("java.lang.Math");

        // 2. 獲取靜態方法 Method 對象
        // 參數:方法名、參數類型陣列
        Method absMethod = mathClass.getMethod("abs", long.class);

        // 3. 調用靜態方法
        // 第一個參數傳 null,後續參數為實際引數
        Object result = absMethod.invoke(null, -10000L);

        System.out.println("Math.abs(-10000L) = " + result); // 輸出:10000
    }
}

關鍵點解析

步驟代碼說明
載入類Class.forName("java.lang.Math")亦可用 Math.class
獲取方法getMethod("abs", long.class)僅能獲取 public 方法;私有靜態方法用 getDeclaredMethod + setAccessible(true)
調用執行invoke(null, -10000L)null 代表靜態調用,若為實例方法則傳實例對象

常見坑點提醒

  • 參數類型必須精確匹配:long.class vs Long.class,基本類型用 .class,包裝類用 Long.class。
  • 異常處理:反射拋出的 InvocationTargetException 真實異常在 getCause() 中。
  • 性能考量:反射調用比直接調用慢,熱點路徑可考慮 MethodHandle 或緩存 Method 對象。

同樣原理適用於調用靜態字段(Field.get(null))、私有靜態方法(需 setAccessible(true))。掌握「第一個參數傳 null」這一核心規則,靜態反射調用即刻上手。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved