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

看板java作者 (痞子軍團團長)時間11年前 (2014/01/03 09:44), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/4 (看更多)
個人意見,僅供參考 ※ 引述《henry4343 (henry)》之銘言: : 請問一下各位,關於static method的使用時機為何? : 以下兩個例子 : 1. Book.openBook(); : 2. Book book = new Book(); : book.openBook(); : openBook(){ : system.out.println("open book"); : } : 其實作的事情都一樣,請問一下什麼情況下會用1,什麼情況下會用2呢 : 對我來說..我想偷懶的時候就會1(少打一點字...) : 但還是希望搞懂這兩種方法到底該怎麼使用比較好? : 感謝各位 我想,會去思考這個問題是很好的 反過來說,有沒有多想三秒鐘呢? Orz 首先,static method 不是作用於一個 instance 上頭 從語意上來說(用你的程式碼) book.openBook() 很確定你是要 book 這個 instance 作 openBook() 的動作 而 Book.openBook()... 並沒有對誰作 或著說,他就是毫無反應、傳統非 OOP 的 function / subroutine 用語意來說,看不出來到底是哪本「書」要打開 除非 Book.openBook(aBook); 我舉另外一個例子 如果你要在字串與 Book 物件之間轉換 那麼你可能就會需要 public class Book { public static Book decode(String data) { //內容不重要 XD String[] field = data.split(","); return new Book(field[0], field[1]); } public static String encode(Book aBook) { return aBook.toString(); } public String toString() { return this.field0 + "," + this.field1 } } decode 的時候本來就還沒有那本書,所以 static method 很適合 這個時候的 class 就是分類學當中的 class 讓你方便記得要把字串解碼成 Book 時,從 Book 這個 class 去找 你要把這個 method 放到 FooUtil 可不可以呢? 你高興就好,至於你的老闆 or partner 會不會在你背後非常火,我就不知道了。 encode 的時候就比較微妙 (當然,我比較喜歡保持 static,跟 decode 對應) 但是你可以體會一下 encode() 裡頭的寫法 大概是這樣子吧 [遠目] -- 錢鍾書: 說出來的話 http://www.psmonkey.org 比不上不說出來的話 Java 版 cookcomic 版 只影射著說不出來的話 and more...... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.168.241.236

01/03 12:55, , 1F
第一段大概懂了!!!第二段還需要慢慢理解..
01/03 12:55, 1F

01/03 12:57, , 2F
感謝大大分享
01/03 12:57, 2F
文章代碼(AID): #1InXOEIG (java)
文章代碼(AID): #1InXOEIG (java)