Java 中的 this 關鍵字

關鍵字 this 是 Java 中引用當前物件的引用變數。

Java 中 this 關鍵字的各種用法如下:

  • 它可用於引用當前類的例項變數
  • 它可用於呼叫或啟動當前類建構函式
  • 它可以作為方法呼叫中的引數傳遞
  • 它可以在建構函式呼叫中作為引數傳遞
  • 它可用於返回當前的類例項

this 關鍵字舉例

class Account { 
    int a; 
    int b; 
    public void setData(int a , int b){
        a = a;
        b = b;
    }

    public void showData(){
        system.out.println("value of A ="+a); 
        System.out.println("value of B="+b);
    }
    
	public static void main(string [args]){ 
    	Account obi = new Account ; 
        obj.setData(2, 3);
        obj.ShowData();
    }
}
  1. class:名為 Account 的類
  2. 例項變數:a 和 b
  3. setData 方法:設定 a 和 b 的值。
  4. showData 方法:顯示 a 和 b 的值。
  5. main 方法:我們為 Account 類建立一個物件,並呼叫方法設定資料和顯示資料。

讓我們編譯並執行程式碼,

C:\Tastons> java Account
Value of A = 0
Value of B = 0

我們對 a 和 b 的預期輸出應分別初始化為值 2 和 3,但輸出值是 0,為什麼?我們來看一下。

在方法 setData() 中,引數宣告為 a 和 b,而例項變數也命名為 a 和 b。

在執行期間,編譯器會困惑,比如分配的運算子左側的 a 是例項變數還是區域性變數呢?因此,在呼叫方法集資料時,它不會設定 a 的值。

解決方案是 this 關鍵字,使用 this 關鍵字後跟 . 運算子然後再加 ab

public void setData(int a , int b){
        this.a = a;
        this.b = b;
}

在程式碼執行期間,當物件呼叫方法 setdata 時。關鍵字 this 由物件處理程式 obj 替換。

所以現在編譯器知道,

  • 左側的 a 是例項變數。
  • 而右側的 a 是區域性變數

現在變數已正確初始化,並能顯示預期輸出。

C:\Tastons> java Account
Value of A = 2
Value of B = 3

假設你足夠聰明,可以為例項變數和方法引數選擇不同的名稱。

class Account { 
    int a; 
    int b; 
    public void setData(int c , int d){
        a = c;
        b = d;
    }
    ....

但是這一次,你建立了類的兩個物件,每個物件都呼叫 setData 方法。

編譯器將如何確定它是否應該在 object1object2 的例項變數上工作。

public void setData(int c , int d){
    a = c;
    b = d;
}

public static void main(string args[]) {
    Account object1 = new Account();
    object1.setData(2, 3);
    Account object2 = new Account();
    object2.setData(4, 3);
}

編譯器隱式地將例項變數附加到 this 關鍵字(下圖)。

這樣當物件 1 呼叫 setData 方法時,例項變數被其引用變數追加。

object1.a = c;
object1.b = d;

當物件 2 呼叫 setData 方法時,物件 2 的例項變數被修改。

object2.a = c;
object2.b = d;

編譯器本身會處理此過程。除非在我們的示例中存在異常情況,否則你不必顯式地附加 this 關鍵字。

示例: 學習來使用 this 關鍵字

class Account{
    int a;
    int b;
    public void setData(int a ,int b){
        a = a;
        b = b;
    }
    public void showData(){
        System.out.println("Value of A ="+a);
        System.out.println("Value of B ="+b);
    }
    public static void main(String args[]){
        Account obj = new Account();
        obj.setData(2,3);
        obj.showData();
    }
}

步驟 1 ab 的值顯示為零?要更正這個錯誤,請使用 this 關鍵字新增到程式。

this.a =a;
this.b =b;

步驟 2: 編譯和執行程式碼,此時,a 和 b 的值分別設定為 2 和 3。

摘要

  • Java 中的 this 關鍵字是一個引用當前物件的引用變數。
  • 它可用於引用當前類例項變數
  • 它可用於呼叫或啟動當前類建構函式
  • 它可以作為方法呼叫中的引數傳遞
  • 它可以在建構函式呼叫中作為引數傳遞
  • 它可用於返回當前的類例項
  • this 是方法正在被呼叫的當前物件的引用,。
  • 你可以使用 this 關鍵字來避免例項/物件的方法/建構函式中的命名衝突。