寶結: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 的使用方式~

 

arrow
arrow
    全站熱搜

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