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

看板java作者 (Alien)時間16年前 (2009/11/13 15:31), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/5 (看更多)
※ 引述《petr (petr)》之銘言: : ※ 引述《tkcn (小安)》之銘言: : : 寫個 finalize method 吧, : : 這樣當 GC 去回收此物件時,就會執行到 finalize 了。 : : 不過要注意一點, : : 並不是將 reference 設成 null,GC 就會立刻回收該物件。 : : 所以如果你希望將 reference 設成 null 時,sum 能立刻反應, : : 還是自己寫 --sum 吧。 : 使用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 也會順便做 (如果有人漏了 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: 202.155.236.82
文章代碼(AID): #1A_GjefC (java)
討論串 (同標題文章)
文章代碼(AID): #1A_GjefC (java)