深入理解this關鍵字
阿新 • • 發佈:2018-12-15
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對方法來說就是呼叫方法的那個物件。