Java this關(guān)鍵字

2020-09-03 10:01 更新

Java面向?qū)ο笤O(shè)計(jì) - Java this關(guān)鍵字


什么是 this?

Java有一個(gè)名為 this 的關(guān)鍵字。它是對(duì)類的當(dāng)前實(shí)例的引用。

它只能在實(shí)例的上下文中使用。

以下代碼顯示如何使用this關(guān)鍵字。

public class Main {
  int varA = 1;
  int varB = varA; // Assign value of varA to varB
  int varC = this.varA; // Assign value of varA to varC
}

當(dāng)實(shí)例變量或類變量被具有相同名稱的另一個(gè)變量隱藏時(shí),我們需要使用關(guān)鍵字this限定一個(gè)實(shí)例變量,并使用類名稱定義一個(gè)類變量。

使用 this 來區(qū)分當(dāng)前對(duì)象。

Java 中為解決變量的命名沖突和不確定性問題,引入關(guān)鍵字 this 代表其所在方法的當(dāng)前對(duì)象的引用:

  1. 構(gòu)造方法中指該構(gòu)造器所創(chuàng)建的新對(duì)象;
  2. 方法中指調(diào)用該方法的對(duì)象;
  3. 在類本身的方法或構(gòu)造器中引用該類的實(shí)例變量(全局變量)和方法。

this 只能用在構(gòu)造器或者方法中,用于獲得調(diào)用當(dāng)前的構(gòu)造器方法的對(duì)象引用??梢院腿魏蔚膶?duì)象引用一樣來處理這個(gè)this對(duì)象。

說明:

  1. 當(dāng)實(shí)例變量和局部變量重名,JAVA 平臺(tái)會(huì)按照先局部變量、后實(shí)例變量的順序?qū)ふ摇<?,方法中使用到的變量的尋找?guī)律是先找局部變量,再找實(shí)例變量。如果沒用找到,將會(huì)有一個(gè)編譯錯(cuò)誤而無法通過編譯。
  2. 如果使用 this.a,則不會(huì)在方法(局部變量)中尋找變量 a ,而是直接去實(shí)例變量中去尋找,如果尋找不到,則會(huì)有一個(gè)編譯錯(cuò)誤。
  3. 在一個(gè)方法內(nèi),如果沒有出現(xiàn)局部變量和實(shí)例變量重名的情況下,是否使用 this 關(guān)鍵字是沒有區(qū)別的。
  4. 在同一個(gè)類中,Java 普通方法的互相調(diào)用可以省略 ?this. ?,而直接使用方法名 + 參數(shù)。因?yàn)?Java 編譯器會(huì)幫我們加上。

例子

下面的代碼顯示了如何使用 this 關(guān)鍵字來引用一個(gè)實(shí)例變量,它的名字被一個(gè)局部變量隱藏。

public class Main {
  int num = 2014; // An instance variable

  void printNum(int num) {
    System.out.println("Parameter num: " + num);
    System.out.println("Instance variable num: " + this.num);
  }

  public static void main(String[] args) {
    Main tt6 = new Main();
    tt6.printNum(2000);
  }
}

上面的代碼生成以下結(jié)果。


注意

下面的代碼顯示了如何使用 this 關(guān)鍵字來引用一個(gè)實(shí)例變量,它的名字被一個(gè)局部變量隱藏。

例如,以下代碼非常常見:

Student 類聲明了一個(gè)實(shí)例變量 id。在其 setId() 方法中,它還命名參數(shù) id,并使用 this.id 引用實(shí)例變量。

它還使用 this.id 在其 getId() 方法中引用實(shí)例變量id。

public class Student {
  private int id; // An instance variable

  public void setId(int id) {
    this.id = id;
  }

  public int getId() {

    return this.id;
  }
}

我們可以使用關(guān)鍵字 this 來限定實(shí)例方法名稱。以下代碼顯示使用關(guān)鍵字 this 調(diào)用 m2() 方法的 m1() 方法。

public class Main {
  void m1() {
    // Invoke the m2() method
    this.m2(); // same as "m2();"
  }

  void m2() {
    // do something
  }
}


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)