当所有类实例超出范围时,Java重置私有静态成员

时间:2013-10-21 00:48:04

标签: java class static instance

您好我想给我的类提供一个静态私有成员来跟踪创建的类对象的数量,但我也想处理它并在所有类实例超出范围时重置。我的情况更容易,因为我不必处理嵌套的范围。即所有实例都在同一级别创建:

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

我当然可以轻松地将重置添加到每个范围的最后一行,但是在MyClass中是否有任何编程方式可以实现此目的?

谢谢

1 个答案:

答案 0 :(得分:1)

Java没有提供确切知道所有对象何时超出范围的可靠方法。此外,如果函数在范围结束之前返回,或者抛出异常,那么简单地在每个范围的末尾添加MyClass.staticReset()的调用可能无法解决问题。

一个可靠的解决方案是将调用添加到包含变量范围的finally块中:

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

请注意,将计数保留在静态内存中可能会在并发环境中出现问题。一个更好的选择是创建一些明确表示“范围”的对象,用它注册实例,然后在reset()块中调用finally