在Java中this關鍵字的使用

王菜鳥發表於2020-10-27

關鍵詞:this

介紹

在學習Java中類的時候,你一定會接觸到this關鍵字。this關鍵字指向的是當前物件的引用。

詳解

首先,定義一個Person類

public class Person {
    String name;    //名字
    //引數who是對方的名字
    //成員變數name自己的名字
    public void sayHello(String who) {
        System.out.println(who + ",你好,我是:" + name);
    }
}

再定義一個測試用例來訪問Person類

public class Demo01Person {
    public static void main(String[] args) {
        Person person = new Person();
        //設定我自己的名字
        person.name = "菜鳥";
        person.sayHello("大佬");
    }
}

在這裡插入圖片描述
以上的程式碼是沒有問題的。那麼,下面的程式碼改了引數名稱:
在這裡插入圖片描述
Person類

public class Person {
    String name;    //名字
    //引數who是對方的名字
    //成員變數name自己的名字
    public void sayHello(String name) {
        System.out.println(name + ",你好,我是:" + name);
}

這時候的輸出結果是:大佬,你好,我是:大佬。顯然,是引數的問題。
這時候,應該知道的是:
當方法的區域性變數和類的成員變數重名的時候,根據就近原則,優先使用區域性變數。如果需要訪問本類當中的成員變數,需要使用格式:
this.成員變數名

在測試用例中,我們可以看到的是,person呼叫了sayHello()的方法,那麼看以下通過this來訪問成員變數的程式碼

public class Person {
    String name;    //名字
    //引數who是對方的名字
    //成員變數name自己的名字
    public void sayHello(String name) {
        System.out.println(name + ",你好,我是:" + this.name);
}

在這裡插入圖片描述
可以看到的輸出結果是大佬,你好,我是:菜鳥

證明

在成員方法中的person呼叫了sayHello(),通過person呼叫方法,那麼person就是this,
this.name其實就等價於person.name

接下來將進行證明:
列印出各自的person中name的地址,可以看到通過this的name和person的name,記憶體地址是相同的。
在這裡插入圖片描述

Person類程式碼

package com.itwcn.demo02;

/**
 * @program: Person
 * @description:
 * @author: OriginalCoder
 * @createtime:2020/10/27 20:54
 **/

/**
 * 當方法的區域性變數和類的成員變數重名的時候,根據就近原則,優先使用區域性變數
 * 如果需要訪問本類當中的成員變數,需要使用格式:
 * this.成員變數名
 */

/**
 * 通過誰呼叫的方法,誰就是this
 */
public class Person {
    String name;    //名字
    //引數who是對方的名字
    //成員變數name自己的名字
    public void sayHello(String name) {
        System.out.println(name + ",你好,我是:" + this.name);
        System.out.println(this);
    }
    //在成員方法中的person呼叫了sayHello(),通過person呼叫方法,那麼person就是this,
    //this.name其實就等價於person.name

}

測試用例的程式碼:

package com.itwcn.demo02;

/**
 * @program: Demo01Person
 * @description:
 * @author: OriginalCoder
 * @createtime:2020/10/27 20:56
 **/

public class Demo01Person {
    public static void main(String[] args) {
        Person person = new Person();
        //設定我自己的名字
        person.name = "菜鳥";
        person.sayHello("大佬");
        System.out.println(person);
    }
}

相關文章