一文徹底弄懂this關鍵字用法

指北君發表於2021-09-01

哈嘍,大家好,我是指北君。
介紹完 native、static、final 關鍵字後,指北君再接再厲,接著為大家介紹另一個常用的關鍵字——this。

this 也是Java中的一個關鍵字,在《Java程式設計思想》第四版第五章5.4小節對 this 關鍵字是這樣介紹的:

this 關鍵字只能在方法內部使用,表示對“呼叫方法的那個物件”的引用。

  其實簡單來說 this 關鍵字就是表示當前物件,下面我們來具體介紹 this 關鍵字在Java中的用法。

1、呼叫成員變數

  在一個類的方法內部,如果我們想呼叫其成員變數,不用 this,我們會怎麼做?

package com.ys.test;

/**
 * Create by YSOcean
 */
public class ThisTest {

    private String name = "Tom";

    public void  setName(String name){
        name = name;
    }

    public String getName() {
        return name;
    }

}

  看上面的程式碼,我們在 ThisTest 類中建立了一個 name 屬性,然後建立了一個 setName 方法,注意這個方法的形參也是 String name,那麼我們通過 name = name 這樣賦值,會改變成員變數 name 的屬性嗎?

   public static void main(String[] args) {
       ThisTest tt = new ThisTest();
       tt.setName("Marry");
       System.out.println(tt.getName());//Tom
   }

  列印結果是 Tom,而不是我們重新設定的 Marry,顯然這種方式是不能在方法內部呼叫到成員變數的。因為形參的名字和成員變數的名字相同,setName 方法內部的 name = name,根據最近原則,編譯器預設是將這兩個 name 屬性都解析為形參 name,從而導致我們設值操作和成員變數 name 完全沒有關係,當然設定不了。

  解決辦法就是使用 this 關鍵字。我們將 setName 方法修改如下:

   public void  setName(String name){
       this.name = name;
   }

  在呼叫上面的 main 方法進行賦值,列印的結果就是 Marry 了。

  this 表示當前物件,也就是呼叫該方法的物件,物件.name 肯定就是呼叫的成員變數。

2、呼叫構造方法

  構造方法是與類同名的一個方法,構造方法沒有返回值,但是也不能用 void 來修飾。在一個類中,必須存在一個構造方法,如果沒有,編譯器會在編譯的時候自動為這個類新增一個無參構造方法。一個類能夠存在多個構造方法,呼叫的時候根據引數來區分。

package com.ys.test;

/**
 * Create by YSOcean
 */
public class ThisTest {
    private String name;

    public ThisTest(){
        this("Marry");
    }
    public ThisTest(String name) {
        this.name = name;
    }
}

  通過 this("Marry") 來呼叫另外一個構造方法 ThisTest(String name) 來給成員變數初始化賦值。

  注意:通過 this 來呼叫構造方法,只能將這條程式碼放在建構函式的第一行,這是編譯器的規定,如下所示:放在第二行會報錯。

3、呼叫普通方法

  this 表示當前物件,那麼肯定能夠呼叫當前類的普通方法。

public void printName(){
        this.say();
    }

    public void say(){
        System.out.println("say method...");
    }

  第 2 行程式碼,在 printName() 方法內部呼叫了 say() 方法。

4、返回當前物件

/**
 * Create by YSOcean
 */
public class ThisTest {

    public Object newObject(){
        return  this;
    }
}

  這表示的意思是誰呼叫 newObject() 方法,那麼就返回誰的引用。

5、小結

  好了,這就是Java中對 this 關鍵詞的介紹,記住一句話 this 代表的就是當前。
  指北君後續的文章會給大家介紹Java中的各種關鍵字。

  我是指北君,操千曲而後曉聲,觀千劍而後識器。感謝各位人才的:點贊、收藏和評論,我們下期更精彩!

相關文章