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

Java 參數傳遞機制與回調模式深度解析

     編輯:Java 相關知識

Java 參數傳遞:傳值還是傳引用?

Java 只有「傳值」一種機制,但這個值可能是基本型別的數值,也可能是物件的參考位址。理解這一點是掌握 Java 參數傳遞行為的關鍵。

基本型別參數傳遞

基本型別(int、double、boolean 等)傳遞的是實際數值的副本,方法內修改不影響原變數。

public void badSwap(int var1, int var2) {
    int temp = var1;
    var1 = var2;
    var2 = temp;
    // 僅交換區域副本,呼叫端變數不變
}

參考型別參數傳遞

物件傳遞的是「參考的副本」。方法內可透過此參考修改物件內容,但無法讓呼叫端的參考指向新物件。

public void tricky(Point arg1, Point arg2) {
    arg1.x = 100;  // 修改物件屬性:影響原物件
    arg1.y = 100;
    
    Point temp = arg1;  // 僅交換區域參考變數
    arg1 = arg2;        // 不影響呼叫端的 pnt1、pnt2
    arg2 = temp;
}

經典結論

Java manipulates objects 'by reference,' but it passes object references to methods 'by value.'
Java 以參考操作物件,但將物件參考以傳值方式傳給方法。


Java 回調機制實作

回調是一種雙向呼叫模式:「If you call me, I will call back」。被呼叫方在執行時會主動呼叫呼叫方提供的方法。

核心元件

  1. 回調介面:定義回調合約
  2. 實作類別 (ClassB):提供具體回調邏輯
  3. 呼叫類別 (ClassA):執行流程並在適當時機觸發回調

程式碼實作

// 1. 回調介面
public interface CallBackInterface {
    void save();
}

// 2. 實作回調邏輯的類別
public class ClassB implements CallBackInterface {
    public void save() {
        System.out.println("執行儲存操作!");
    }
    
    public void add() {
        // 呼叫 ClassA 並傳遞自己作為回調處理者
        new ClassA().executeSave(this);
    }
}

// 3. 執行流程並觸發回調的類別
public class ClassA {
    public void executeSave(CallBackInterface callback) {
        getConn();           // 取得資源
        callback.save();     // 回調:呼叫對方的 save()
        release();           // 釋放資源
    }
    
    private void getConn() { System.out.println("取得資料庫連線!"); }
    private void release() { System.out.println("釋放資料庫連線!"); }
}

匿名類別簡化回調

實務上常使用匿名內部類別直接實作介面,避免建立額外類別:

new ClassA().executeSave(new CallBackInterface() {
    @Override
    public void save() {
        System.out.println("匿名類別實作的儲存邏輯");
    }
});

應用場景

  • 事件驅動程式設計(如 GUI 按鈕點擊監聽)
  • 非同步任務完成通知
  • 框架層呼叫應用層邏輯(Spring、Hibernate 大量使用)
  • 資源管理:取得→執行回調→釋放

掌握參數傳遞本質與回調模式,能讓你設計出更靈活、解耦的 Java 架構,也是理解主流框架運作原理的基礎。

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