close

6.3
雖然大部分的方法在回應方法呼叫時,是透過特定物件來執行,但情形並非總是如此。
有時方法所執行的工作與任何物件的內容無關。
這種方法適用於類別,他與宣告的類別成為一體,這種方法稱為static方法,或類別方法(class method)。
類別包含一些便利的static方法,執行常見的工作,是一種很平常的情形。

8.11
static類別成員
每個物件都擁有該類別所有實體變數的個別副本。
在某些情況下,特定的變數只該有一個副本,供類別所有的物件共用。
在這此種情況下,便會使用static欄位(static field)----也稱為類別變數(class variable)。
我們以一個範例來說明static變數宣告時機。
假設有一款電玩遊戲中有Martian(火星人)及其他太空生物。
每位Martain只要知道至少有其他四位Martain在場時就會變得很勇敢,而且會攻擊其他太空生物。
若不足五位,則很懦弱。
因此,每個Martain都需要知道martainCount。
我們便將martainCount當作實體變數加入到Martain類別中。
如果我們這樣做,每個Martain都會有此變數各自獨立的副本。
不僅浪費空間,且容易產生錯誤。
若martainCount宣告為static,讓martainCount屬於全類別的資料,每位Martain都可以看到martainCount。

8.12
在6.3節中,你學過Math類別的static欄位及方法。
我們會在欄位或方法名稱前面加入類別名稱Math與點號(.)來呼叫Math類別的static欄位及方法。
static匯入宣告讓你可以匯入類別static成員或介面,使你能夠在你的類別中,
使用非完整識別名稱來存取這些成員----使用所匯入的static成員時,無須再使用類別名稱與點號。

[軟體工程的觀點]
1.當類別所有的物件都必須使用同一個變數副本時,請使用static變數
2.即使類別尚未實體化任何物件,static類別變數和方法早已存在,而且可使用。
(static方法不能存取非static類別成員,因為static方法可以在尚未有類別物件被實體化之前,便加以呼叫。基於相同原因,this參照也無法使用在static方法中。
this參照必須指向該類別特定的物件,然而在呼叫static方法時,該類別可能沒有任何物件在


static

全站熱搜
創作者介紹
創作者 alex2008 的頭像
alex2008

alex2008的部落格

alex2008 發表在 痞客邦 留言(0) 人氣()