1. 程式人生 > >深入理解this關鍵字

深入理解this關鍵字

 

this是什麼?

在Java語言中,當建立一個物件後,Java虛擬機器就會為其分配一個指向物件本身的指標,這個指標就是“this”。

this關鍵字有哪些用法?

一、呼叫本類的成員變數

class Person{
    private String name;

    public Person(String name){
        this.name = name;
    }
}

上述程式碼中,構造方法中的形參與Person類的成員變數名稱相同,如果不使用this關鍵字,不說我們,編譯器也無法辨識出是將形參name賦給成員變數還是將成員變數name賦給形參,

所以this關鍵字可以指明引數是該類的成員變數,即this.name = name表示的是將形參name賦給成員變數name。

二、呼叫構造方法

class Person{
    private String name;
    private String sex;

    public Person(String name){
        this.name = name;
    }

    public Person(String name,String sex){
        this(name);
        this.name = name;
    }
}

當一個類中有多個含有不同引數的構造方法時,可以使用this呼叫其他的構造方法,而只要傳入合適的引數即可。

當然這種this呼叫方式也有一定的限制

(1)使用this呼叫其他構造方法是必須放在該構造方法的第一行

(2)當類中有多個構造器使用this互相呼叫時,必須有一個構造器是不使用this呼叫其他構造器的,否則將造成互相呼叫的死迴圈,類似於遞迴演算法,當然這種寫法編譯器也不會通過。

(3)在一個構造方法中只能呼叫一次

三、呼叫自身物件

public class Keyword_this {

    public static void main(String[] args){
        Person person1 
= new Person("蘋果大大個"); person1.getInfo(); System.out.println("我是誰=====>" + person1); } } class Person{ private String name; public Person(String name){ this.name = name; } public void getInfo(){ System.out.println("我是誰=====>" + this); } }

執行結果:

我是誰=====>[email protected]
我是誰=====>[email protected]

根據結果顯示,main方法中直接打印出來的物件與getInfo方法中列印的this物件是同一個,也就是說this對方法來說就是呼叫方法的那個物件。