在 JavaRush,學生從第一堂課開始就逐字逐句地了解了關鍵字
事實證明,您只需
也就是說,
下面是帶有關鍵字的程式碼
this
。隨著時間的推移,它的意義就會變得清晰。但很多人回想起來,可能會誠實地對自己說,很長一段時間他們都無法意識到這個關鍵字的禪。this
在這篇文章中,我們為那些仍然無法弄清楚的人揭開了使用關鍵字的秘密......歡迎!如果您閱讀Schildt 的 Java參考書,第 171 頁,您會讀到需要關鍵字this
,以便方法可以引用呼叫它的物件。這實際上可能是它的結束。但我們需要具體細節。 一般來說,this
它應該在兩種情況下使用:
- 當類別實例變數和方法/建構函數變數同名時;
- 當您需要從一種類型呼叫另一種類型的建構函式(例如,預設或參數化建構函式)時。這也稱為顯式建構函數呼叫。
範例一-實例變數和方法變數同名
假設我們有一個Human
定義了「name」欄位的類別: 讓我們name
為變數建立一個 setter(該 setter 非常有效,這裡沒有技巧): 請注意,我們將變數傳遞給方法(setter )。我們引入了一個新變量,並且(通常)可以將其命名為我們想要的任何名稱,因為它僅在方法的 {花括號} 內可見。請注意,setter 中有一行: setName
String newName
setName
name = newName;
也就是說,實際上我們引入了一個新變數newName
並將其賦值給類別中已經存在的變數name
。許多程式設計師認為,如果最終我們談論的是同一件事,那麼引入一個具有新名稱的變數很奇怪。關於班上的名字Human
。因此,語言開發人員就想到如何方便地使用一個變數名。換句話說,為什麼同一個變數有兩個名字呢?也就是說,我想做這樣的事情: 但在這種情況下出現了一個問題。現在我們有兩個名稱相同的變數。一個String name
屬於類Human
,另一個String name
屬於它的方法setName
。因此,當你在 setter 中寫入字串時,Java 機器不知道你指的是哪個變數:
name = name;
name
Java從方法中 選取最接近的一個setName
:
name
從該方法中為變數分配一個值即可。這當然沒有任何意義。因此,需要某種方法來區name
分類中的變量和方法中的Human
變量。為了解決這個問題,引入了關鍵字,在這種情況下,它將指示需要調用不是方法的變量,而是調用變量。一個類的: name
setName
this
Human
this
它將引用呼叫對象,如本文開頭所述。結果,人名將setName
透過 setter 設定到創建的物件中。下面是不使用關鍵字的程式碼this
。該程式碼建立一個類別物件Human
並為其命名:
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;
所以你用三個參數告訴建構子:
- 呼叫這個建構函數,它有兩個參數。
- 並加入缺失的變數。
this
會傳遞給靜態方法之外的所有方法(因此它this
通常被稱為隱式參數),並且可用於引用呼叫該方法的物件。沒有必要害怕這個關鍵字,因為This
它並不可怕。
GO TO FULL VERSION