寶結:Ian, 對於史前時代發現的static,你怎麼看?
我:謝謝寶結做球給我,我這就來說明一下我心中的static。
static的觀念不難懂,比較麻煩的地方是何時要用。
猶記我一開始寫程式的時候,對這個觀念真是頭痛不已,
如果你也跟我一樣是個半路出家的程式設計者,
沒有記憶體配置的觀念,那你也會有跟我一樣的痛苦。
當時我接下了一個重要的feature,可是先人給的code
有個 static class,但是又有前輩高手說,其實這個地方不需要
用到static。
我在旁邊聽著,點頭稱是(快點頭,不然會被別人發現我不懂xd)
當時我就在思量,為什麼搞一個這麼麻煩的東西給自己,
然後裡面的變數都要跟著宣告成 static。
大部分的人會說:
反正它就是存在記憶體當中「唯一」的一個。
但是懵懂無知的我,實在不太清楚這有什麼意義。
後來有前輩自己寫了一個util,讓整個程式方便許多,
對於一些「download」、「查時間」、「比對版本」的動作,
我只要呼叫他寫好的:
Util.download();
Util.checkTime();
Util.checkNewVersion();
就可以很輕鬆得到我想要的結果,然後帶入我要繼續做的動作。
然後我再注意到一些內建的Java Api, 到底哪些是用 static 方式構成,
我才慢慢了解static主要的意義為何。
舉例來說,時鐘(Clock)是一個很容易說明的例子,
將它宣告成 static,主要是把它視為一個"通用的工具",
可以想像你們全公司只有一個時鐘。
當我想要查時間的時候,我只要看一眼牆上時鐘
現在的時間是幾點就好了,我不需要儲存這個時間在我腦海裡,
或者筆記本上面。更不需要多一個時鐘在我的抽屜裡,佔我的空間。
因為這個「時間」只對當下有意義,必須配合「我現在做什麼」。
我會做的事情是--我想知道我下班幾點?我上班幾點?我完成工作時幾點?
所以我的class會這樣構築:
class onDuty {
public string getCurrentTime()
{
return Clock.getTime();
}
}
意思是說,我在上班的時候,想要查看我當時的時間,
所以我看了牆上的時鐘(共通的工具),知道我現在的時間後,
記錄下上班時間,我就不需要它了(可以讓給別人使用)。
但是它卻一直在牆上喔!!
當你宣告一個 class 為 static,可以說你期待它成為的是:
1. 一次性使用
2. 工具
既然是工具,我們會希望它"很容易使用",
所以我們無需new一個新的工具,直接可以叫用
(它早就掛在牆上了,不會消失)
Clock.getTime();
我們就知道時間了!
回傳是 "08 : 30 am",但是這個時間也僅止於你當下使用,
例如:我上班的時間是 "08:30 am"
下班時間如果還是 "08:30 am",那就不合理了,也沒意義。
下班再看一下掛在牆上的鐘( 叫用"Clock.getTime()" ),可能就會變成 "06:30 pm"
那也是在下班這個時候叫用 "Clock.getTime()",才有意義。
「我下班的時間是 "06:30 pm"」
也就是說,它顯示的數值,就是在你當下叫用才有意義。
話說回來,如果我們是一個窮酸的公司,
我們要「開源節流」、「共體時艱」,所以我們不需要花多餘的錢買時鐘,
(也沒有太多的牆可以掛時鐘)
在盡量節省的狀況下,我們只需要一個時鐘(輪流看就好)。
為了方便使用,為了節省空間,所以把它掛在牆上,
成為一個靜態的(static)、方便大家使用的工具。
這就是 static class 的使用方式~
留言列表