Re: [問題] object指向null後 class variable怎麼辦?

看板java作者 (petr)時間16年前 (2009/11/13 17:01), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串5/5 (看更多)
※ 引述《adrianshum (Alien)》之銘言: : ※ 引述《petr (petr)》之銘言: : : 使用finalizer是絕對不智的 : : JVM內thread執行finalizer的priority通常很低 : : Java的spec甚至沒有規定finalizer一定會被執行 : : 甚至可能JVM結束了,finilizer都不會被執行到 : : 如果想要有一個統計總共有幾個instance的資訊 : : 1. 最簡單的方式是使用Collection來裝這些instance,不用了就把它remove掉 : : 或者 : : 2. 使用一個private的變數來記錄這個instance是否已經不再需要, : : 如果這instance不要了,就把這個變數設為false,然後--sum,但是每個client : : 要使用這類class時,要先check這個instance是否合法,要把它丟掉的時候 : : 設為false 主要也是在close做掉吧,finalizer只是多買份保險,也不知道會不會發生作用 總之不要把重要的事情放在finalizer,然後期望VM會執行到它 所以才會說那些事情只擺在finalizer是不智的 另外close的方法最好不要像你那樣子用 擺在finally裡面吧,因為你不知道前面的過程會遇到什麼問題 : 沒有什麼不智吧. : 一般要取得資源的情況, 做的方法是靠 close() (叫什麼不重要), : 然後 finalizer 也會順便做 (如果有人漏了 close 的話): : public class Foo { : public enum Status { : ACTIVE, : CLOSED, : } : private static int totalCount = 0; : private Status status; : public Foo() { : this.status = Status.ACTIVE; : ++totalCount; : } : public void close() { : if (Status.ACTIVE == this.status) { : this.status = Status.CLOSE; : --totalCount; : } : } : public void finalize() { : this.close(); : } : } : 用的時候 : Foo foo = new Foo(); : // 用 foo : // 用完了 : foo.close(); : 搞定 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.23.102

11/13 19:02, , 1F
只是例子而已 :P 放 finally 又是另一個課題了
11/13 19:02, 1F
文章代碼(AID): #1A_I24kJ (java)
討論串 (同標題文章)
文章代碼(AID): #1A_I24kJ (java)