標籤:size string code 建立 void int name 測試 屬性
this 關鍵字有三個應用:
1.this調用本類中的屬性,也就是類中的成員變數
2.this調用本類中的其他方法
3.this調用本類中的其他構造方法,調用時要放在構造方法的首行
來看下面這段代碼:
public String name;public void showName(String name) { System.out.println(name);}
上面的代碼中有個叫name的成員變數,也有個同樣叫name的方法參數。那麼showName方法會輸出參數的name還是成員變數name呢?
測試代碼:
Foo foo = new Foo();foo.name = "張三";foo.showName("李四");
運行結果:
李四
運行結果顯示答案是會輸出參數的name,原因是Java文法擷取變數的時候採取的是就近原則所以name代表的是離它最近的參數name。如果想要輸出成員變數name怎麼辦,把參數名name改了嗎?那又得多想一個變數名多麻煩啊。還好Java提供了this關鍵字可以引用類的對象。
把上面的代碼改成:
public String name;public void showName(String name) { System.out.println("我是方法參數:" + name); System.out.println("我是類的屬性:" + this.name);}
運行結果:
我是方法參數:李四我是類的屬性:張三
可以看出this關鍵字代表調用改方法的對象,此時相當於對象foo。
再來看一個例子。
public Foo returnThis() { return this;}public Foo getInstance() { return new Foo();}
測試代碼:
Foo foo = new Foo();Foo foo2 = foo.returnThis();Foo foo3 = foo.getInstance();System.out.println("foo和foo2是同一對象嗎? --> " + (foo == foo2));System.out.println("foo和foo3是同一對象嗎? --> " + (foo == foo3));
運行結果:
foo和foo2是同一對象嗎? --> truefoo和foo3是同一對象嗎? --> false
這個例子很明確的說明了“this關鍵字代表調用改方法的對象”,該例子中return this返回的是調用該方法的對象也就是foo,所以foo2和foo指向的是同一對象。而 new Foo是建立一個新的Foo對象。所以foo3和foo並不指向同一對象。
Java this關鍵字