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

Java 回調函數通俗理解:從生活場景到代碼實現

     編輯:Java 相關知識

什麼是回調?

客戶程式 C 呼叫服務程式 S 的函數 A,S 在稍後反過來呼叫 C 提供的函數 B。對 C 來說,B 就是回調函數。C 不會主動呼叫 B,而是將 B 註冊給 S,由 S 決定何時觸發。

生活化類比

我打固話問同事「1+1=?」,同事說「稍後回你」。我說「我要出門,想好打我手機」。
幾分鐘後,手機響起,同事說「等於 2」。

  • 我 = 客戶程式 C
  • 同事 = 服務程式 S
  • 「打手機」 = 回調介面 `CallBack`
  • 「回答等於 2」 = 具體回調實現

代碼實現三步驟

1. 定義回調介面(約定協議)

public interface CallBack {
    void CallIphone(); // 規定「打手機」這一方式
}

2. 客戶程式(我)

public class Me {
    public void askQuestion() {
        System.out.println("撥打固話問 1+1=?");
    }
}

3. 服務程式(同事)與主程式

public class You {
    public void answer(CallBack callBack) {
        callBack.CallIphone(); // 觸發回調
    }

    public static void main(String[] args) throws InterruptedException {
        new Me().askQuestion();
        Thread.sleep(3000); // 模擬思考時間
        new You().answer(new CallBack() {
            @Override public void CallIphone() {
                System.out.println("撥打手機回答等於 2");
            }
        });
    }
}

輸出結果

撥打固話問 1+1=?
撥打手機回答等於 2

核心要點總結

  1. 介面定義規範:服務方不需知道具體實現類,只依賴介面。
  2. 註冊機制:客戶端將實現類傳給服務端(此處透過方法參數)。
  3. 控制反轉:服務端決定「何時」呼叫回調,客戶端專注「做什麼」。

應用場景

  • 事件監聽(按鈕點擊、滑鼠移動)
  • 異步任務完成通知
  • 框架擴展點(Servlet Filter、Spring AOP、RMI/WebService 回調)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved