Re: [問題] static method使用時機?

看板java作者 (CHA)時間11年前 (2014/01/05 03:05), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
※ 引述《henry4343 (henry)》之銘言: : 請問一下各位,關於static method的使用時機為何? : 以下兩個例子 : 1. Book.openBook(); : 2. Book book = new Book(); : book.openBook(); : openBook(){ : system.out.println("open book"); : } : 其實作的事情都一樣,請問一下什麼情況下會用1,什麼情況下會用2呢 : 對我來說..我想偷懶的時候就會1(少打一點字...) : 但還是希望搞懂這兩種方法到底該怎麼使用比較好? : 感謝各位 提供一下自己的使用原則 基本上static function最重要的就是能在沒有class instance的狀態下直接使用 所以要不要宣告為static function必需考慮這個function的用途 以例子中的openBook()來說 我建議用1 畢竟做的事和class instance無關 而且特別new一個instance出來還要多花memory呢... 另外基於readable的原則來說的話,用2會讓看code的人confuse "為什麼這個function要new一個instance才能用呢? 是不是這個function運作的結果和instance的狀態有關?" (然而事實上根本毫無關係) 所以我的建議是 如果該function和instance本身無關 就用static function 反之會和該class的instance有關係的,就不要宣告為static 從語義上來說,"static"是靜態的意思 可以想成若傳入的參數(如果有)都一樣的話,不論怎樣call該function結果應該都一樣 所以這個function的運作和class instance是無關的。 而既然無關又何必要有instance才能call這個function呢? 所以static function就可以直接呼叫嘍 (當然你要用instance去call static function也沒有語法上的問題就是了) (另外,因為static function可以直接呼叫, 所以該function若有用到變數或function也必需是static才行 否則會有unknown value的問題) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.243.113.252
文章代碼(AID): #1Io5kNxQ (java)
文章代碼(AID): #1Io5kNxQ (java)