如果有兩個同類型的對象
分別叫作a和b
那麼您也許不知道如何為這兩個對象同時調用一個f()方法
class Banana { void f(int i) { /*
*/ } }
Banana a = new Banana()
b = new Banana();
a
f(
);
b
f(
);
若只有一個名叫f()的方法
它怎樣才能知道自己是為a還是為b調用的呢?
為了能用簡便的
面向對象的語法來書寫代碼——亦即
將消息發給對象
編譯器為我們完成了一些幕後工作
其中的秘密就是第一個自變量傳遞給方法f()
而且那個自變量是准備操作的那個對象的句柄
所以前述的兩個方法調用就變成了下面這樣的形式
Banana
f(a
);
Banana
f(b
);
這是內部的表達形式
我們並不能這樣書寫表達式
並試圖讓編譯器接受它
但是
通過它可理解幕後到底發生了什麼事情
假定我們在一個方法的內部
並希望獲得當前對象的句柄
由於那個句柄是由編譯器
秘密
傳遞的
所以沒有標識符可用
然而
針對這一目的有個專用的關鍵字
this
this關鍵字(注意只能在方法內部使用)可為已調用了其方法的那個對象生成相應的句柄
可象對待其他任何對象句柄一樣對待這個句柄
但要注意
假若准備從自己某個類的另一個方法內部調用一個類方法
就不必使用this
只需簡單地調用那個方法即可
當前的this句柄會自動應用於其他方法
所以我們能使用下面這樣的代碼
class Apricot {
void pick() { /*
*/ }
void pit() { pick(); /*
*/ }
}
在pit()內部
我們可以說this
pick()
但事實上無此必要
編譯器能幫我們自動完成
this關鍵字只能用於那些特殊的類——需明確使用當前對象的句柄
例如
假若您希望將句柄返回給當前對象
那麼它經常在return語句中使用
//: Leaf
java
// Simple use of the
this
keyword
public class Leaf {
private int i =
;
Leaf increment() {
i++;
return this;
}
void print() {
System
out
println(
i =
+ i);
}
public static void main(String[] args) {
Leaf x = new Leaf();
x
increment()
increment()
increment()
print();
}
} ///:~
由於increment()通過this關鍵字返回當前對象的句柄
所以可以方便地對同一個對象執行多項操作
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19455.html