static 靜態 是個很奇妙的 關鍵字
早在 哈囉,世界 的時候就看到 static void Main() 這個 加了 static 關鍵字的方法
但是在真正了解 static 的意義卻又是很久以後的事了
最基本 也大家都知道的是
靜態的成員 不需要實體(Instance) 就能進行訪問
非靜態的成員 必須 new 一個 實體(Instance) 才能進行訪問
但這不算解釋 反而是混亂的開始
在單一使用者 單一執行 簡單功能 的情況下 這2種寫法 跑的結果一模一樣
這時就會有人覺得 那就都用靜態就好了呀 不用 new 多方便
但是隨即就嚐到苦頭 因為 靜態並非 沒有實體 而是只有一個實體 在程式執行之初就建立 並佔用記憶體位置 而且一直存在
當程式用上一堆靜態成員的時候 就造成不必要的記憶體浪費
但是現在硬體都不錯 也許這隱藏殺機不是那麼明顯 但是另一個問題就頭大囉
那就是牽一髮而動全身 靜態成員是唯一的 只要是宣告成 static 且同名的成員 都是共用一區記憶體位置
即使你這麼做
雖然 new 了三個物件 但是只要設定其中一個 其他三個 也會跟著改變
相對於 變數 屬性 這種顯而易見的差異 靜態方法 跟 非靜態方法 就顯得有些曖昧
靜態方法 屬於 類別所有
非靜態方法 屬於 實體所有
靜態方法 只能以類別名叫用 即使是 非靜態類別
非靜態方法 只能以實體叫用 所以 靜態類別 內無法有 非靜態方法 (靜態類別內一切都是靜態的)
從執行效能來看 靜態方法 比較好 因為是共用的 省去建立 跟 銷毀 物件的效能
但是也代表 靜態方法 永遠存在 不論這方法 會不會被執行
即使這樣說也很難判斷到底何時要用 靜態方法 何時不用
但是如果從物件導向的角度 - 封裝 出發 就很明確
例如一個公開的類別的 公開靜態方法 跟 公開非靜態方法 就有意義上的不同
公開的類別的公開靜態方法 即使不屬於此類別 也能叫用 因為都是公開的
公開的類別的公開非靜態方法 卻只能是 屬於此類別的 實體 才能叫用
例如一個公開類別名叫 男人 有個方法叫 站著小便
如果他是 非靜態方法 那麼可以確定 只有男人可以站著小便
如果他是 靜態方法 那就好玩了 就算是女人類別 也能 執行 男人.站著小便() 方法
好吧我知道這例子很鳥 或許真的有女人喜歡站著小便?!
那再舉一例吧 跟錢有關的 都比較有深刻體驗
例如一個公開類別名叫 我 有個方法叫 花光我的積蓄當月光仙子
如果他是 非靜態方法 那麼可以確定 只有我可以花光我的積蓄當月光仙子
如果他是 靜態方法 那就好玩了 就算是路人類別 也能 執行 我.花光我的積蓄當月光仙子() 方法
然後我的薪水就被花光了 而且花光的人 還不是我
WTF,怎麼每個聽起來都很可怕 那又什麼時候該用 靜態方法?
例如一個公開類別名叫 學生 有個方法叫 作弊
如果他是 靜態方法 那真棒 誰都可以幫助學生作弊
如果他是 非靜態方法 那有點糟 學生只能自立自強 備妥小抄望遠鏡
好吧我知道這例子很鳥 鼓吹作弊 違反社會善良風俗
例如一個公開類別名叫 我 有個方法叫 叫我起床
如果他是 靜態方法 那真棒 誰都可以叫我起床
如果他是 非靜態方法 那有點糟 只有我可以叫我自己起床 沒人幫的了我
受教了~正在嘗試一秒理解
回覆刪除恭喜 您是第一個留言的朋友
回覆刪除只是很可惜我沒有大獎可以送您 ˊ_>ˋ
謝謝您這麼幽默又清楚的解釋~~
回覆刪除:)
回覆刪除好幽默的解釋,如果課本或技術講解都有這樣生動的解釋就好了XD
回覆刪除(◕ܫ◕)
回覆刪除我看惹好幾秒還是不懂怎摸辦
回覆刪除😢
回覆刪除版主厲害
回覆刪除這解釋如果以前當學生有人這樣教我 秒懂
* w *
回覆刪除推一個~
回覆刪除多虧這篇文章才讓我比較懂了 static 的意義所在~
原來是這樣啊啊啊啊啊!!!
回覆刪除謝謝你幫我解除了學程式以來的困惑😆
回覆刪除初學程式看完這篇還是有點似懂非懂
回覆刪除累積點經驗之後再看第二次就更明確了
感謝版主~~d(d'∀')
感謝版主
回覆刪除實際的例子有點像繞口令,但感覺好像懂了XD
Q_Q 每次遇到static 都會忘記
回覆刪除忘記就會回來再看一次 ㄎㄎ
這篇真的猛 讚!
回覆刪除我有個class裡面有"價錢累積的變數total", 如果不用"靜態"宣告,它就無法累積
回覆刪除看完你這篇,好像有點概念,知道點原理的感覺了
讚讚!!
謝謝樓主,這樣我了解什麼是靜態方法了。
回覆刪除跪了
回覆刪除雖然看了不只一秒
但是跟其他講解比起來真的是一秒
而且完全不會混亂!!!!
其他解釋static的解釋的太爛 ,同一段文字抄來抄去氣死誰啊。你說得很清楚,謝謝
回覆刪除話說最後一個例子才能秒懂(切身之痛?!)....
回覆刪除公開類別名:我
方法:叫我起床
謝謝PO主清楚明白的解釋,開釋我一直搞不懂的問題,對程式新手而言很受用 QQ
回覆刪除謝謝教學 懂好多關於static的知識!
回覆刪除這解釋非常生動跟到位
回覆刪除看了這樣多年的程式,今天終於懂得static的真正意義,感謝你無私的分享,令我受益無窮!!感謝!!
回覆刪除很清楚,謝謝分享!
回覆刪除之前有看過一個歷史紀錄片說古代女人是站著小便的
回覆刪除這個解釋hen棒
回覆刪除讚讚的解釋
回覆刪除666
回覆刪除查了查..真的很多說明都不是說明
回覆刪除看了這篇,才知道甚麼是static。
感謝大大
最後一個舉例 請問是看了太多全面啟動嗎
回覆刪除非常生動的舉例 XDD
夫妻財產共有制就是適合靜態方法 (你的錢就是我的錢.....)
回覆刪除謝謝大大的整理分享!
回覆刪除跪拜大神生動解析
回覆刪除謝謝大大用淺顯易懂的方式說明!
回覆刪除真的秒懂 太厲害了!
回覆刪除厲害了這個解釋 疑惑全解..
回覆刪除謝謝哥的文章 希望你可以繼續解析 真的厲害....!
回覆刪除很棒的解釋 太感謝了
回覆刪除太讚了~ 己霸婚
回覆刪除終於聽懂了..
回覆刪除感謝教學 謝謝.. 真的太厲害了
回覆刪除謝謝大師拯救我QQQ
回覆刪除