JavaRush /Java Blog /Random-TW /關鍵字 this {在範例中}

關鍵字 this {在範例中}

在 Random-TW 群組發布
在 JavaRush,學生從第一堂課開始就逐字逐句地了解了關鍵字this。隨著時間的推移,它的意義就會變得清晰。但很多人回想起來,可能會誠實地對自己說,很長一段時間他們都無法意識到這個關鍵字的禪。this在這篇文章中,我們為那些仍然無法弄清楚的人揭開了使用關鍵字的秘密......歡迎!如果您閱讀Schildt 的 Java參考書,第 171 頁,您會讀到需要關鍵字this,以便方法可以引用呼叫它的物件。這實際上可能是它的結束。但我們需要具體細節。 關鍵字 this {範例} - 1一般來說,this它應該在兩種情況下使用:
  1. 當類別實例變數和方法/建構函數變數同名時;
  2. 當您需要從一種類型呼叫另一種類型的建構函式(例如,預設或參數化建構函式)時。這也稱為顯式建構函數呼叫。
就是這樣,實際上不多,只是使用了這個可怕的關鍵字的兩個實例。現在我們透過例子來看看這兩種情況。

範例一-實例變數和方法變數同名

假設我們有一個Human定義了「name」欄位的類別: 關鍵字 this {範例} - 2讓我們name為變數建立一個 setter(該 setter 非常有效,這裡沒有技巧): 請注意,我們將變數傳遞關鍵字 this {範例} - 3給方法(setter )。我們引入了一個新變量,並且(通常)可以將其命名為我們想要的任何名稱,因為它僅在方法的 {花括號} 內可見。請注意,setter 中有一行: setNameString newNamesetName
name = newName;
也就是說,實際上我們引入了一個新變數newName並將其賦值給類別中已經存在的變數name。許多程式設計師認為,如果最終我們談論的是同一件事,那麼引入一個具有新名稱的變數很奇怪。關於班上的名字Human。因此,語言開發人員就想到如何方便地使用一個變數名。換句話說,為什麼同一個變數有兩個名字呢?也就是說,我想做這樣的事情: 關鍵字 this {範例} - 4但在這種情況下出現了一個問題。現在我們有兩個名稱相同的變數。一個String name屬於類Human,另一個String name屬於它的方法setName。因此,當你在 setter 中寫入字串時,Java 機器不知道你指的是哪個變數:
name = name;
nameJava從方法中 選取最接近的一個setName
關鍵字 this {範例} - 5
事實證明,您只需name從該方法中為變數分配一個值即可。這當然沒有任何意義。因此,需要某種方法來區name分類中的變量和方法中的Human變量。為了解決這個問題,引入了關鍵字,在這種情況下,它將指示需要調用不是方法的變量,而是調用變量。一個類的: namesetNamethisHuman
關鍵字 this {範例} - 6
也就是說,this它將引用呼叫對象,如本文開頭所述。結果,人名將setName透過 setter 設定到創建的物件中。下面是不使用關鍵字的程式碼this。該程式碼建立一個類別物件Human並為其命名:
關鍵字 this {範例} - 7
下面是帶有關鍵字的程式碼this
public class Solution{
    public static void main(String[] args) {
        Human human1 = new Human();
        human1.setName("Volodya");
        human1.print();
    }
}
class Human{
    String name;
    public String getName() {
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    void print(){
        System.out.println(name);
    }
}
因此,它this避免引入新變數來表示相同的事物,這使得程式碼較少因附加變數而「過載」。

範例二 - 使用此明確呼叫建構函數

當您(奇怪的是)有多個構造函數並且您不想在新的構造函數中重寫構造函數中先前給出的初始化程式碼時,從另一個構造函數呼叫一個構造函數可能會很有用。使困惑?一切都不像看起來那麼可怕。看下面的程式碼,它有兩個類別建構子Human
class Human{
    int age;
    int weight;
    int height;

    Human(int age, int weight){
        this.age = age;
        this.weight = weight;
    }
    Human(int age, int weight, int height){
        //you call the constructor with two parameters
        this(age, weight);
        //and add the missing variable
        this.height = height;
    }
}
int age這裡我們先有一個接受和 的 雙參數建構子int weight。假設我們在其中編寫了兩行程式碼:
this.age = age;
this.weight = weight;
然後他們決定再增加一個有三個參數的建構函數,除了年齡和體重之外,還需要身高。在新的構造函數中你可以這樣寫:
this.age = age;
this.weight = weight;
this.height = height;
但是,您可以使用關鍵字明確呼叫帶有兩個參數的建構函數,而不是重複已在此建構函數中編寫的程式碼this
this(age, weight);
// and add the missing variable:
this.height = height;
所以你用三個參數告訴建構子:
  • 呼叫這個建構函數,它有兩個參數。
  • 並加入缺失的變數。
僅此而已=)。最後,我們注意到 Java 中的 this 關鍵字僅用作類別實例的方法或建構函數的一部分。但隱式地,該關鍵字this會傳遞給靜態方法之外的所有方法(因此它this通常被稱為隱式參數),並且可用於引用呼叫該方法的物件。沒有必要害怕這個關鍵字,因為This它並不可怕。
關鍵字 this {範例} - 9
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION