2013-10-21 58 views
1

您好我想給一個靜態私有成員到我的類跟蹤創建的類對象的數量,但我也想處置它,並重置類實例超出範圍。事情對我的情況更容易,因爲我不必處理嵌套範圍。即所有實例都在同一級別創建:Java當所有類實例超出範圍時重置私有靜態成員

if (true) { 
    MyClass(); // Count 1 
    MyClass(); // Count 2 
} 
if (true) { 
    MyClass(); // Count 1 
    MyClass(); // Count 2 
} 

我當然可以輕鬆地添加復位到每個範圍的最後一行,但有MyClass中被實施,以實現這一目標的任何編程方法?

謝謝

+0

我真的不明白你想要做什麼。 Java沒有像C++/Objective-C這樣的解構器,並且你不能處理靜態成員,因爲Java沒有刪除/釋放等等。 – Radiodef

回答

1

Java沒有提供可靠的方法來準確瞭解所有對象何時超出範圍。而且,如果函數在範圍結束之前返回,或者拋出異常,只需在每個範圍的末尾添加MyClass.staticReset()的調用即可。

一個可靠的解決方案將被添加調用finally虛線框包含的變量的範圍:

if (someConditionIsTrue) try { 
    MyClass(); // Count 1 
    MyClass(); // Count 2 
} finally { 
    MyClass.staticReset(); 
} 

注意保持計數的靜態存儲器可能成爲併發環境問題。一個更好的選擇是創建一個明確表示「範圍」的對象,用它註冊實例,然後在finally塊中調用reset()

+0

謝謝,所以我把它作爲沒有自動的方式來檢測超出範圍在java中的對象。 – user1589188

+0

@ user1589188正確 - 這是垃圾回收的結果。 – dasblinkenlight