try
{
operation1();
operation2();
...
}
finally
{
try
{
finalizer_operation1();
finalizer_operation2();
}
finally
{
very_critical_finalizer_operation_which_should_occurs_at_the_end();
}
}
这可以吗?要将终结器作为另一个try/finally
块(因为finalizer_operationX()
可能会抛出,我必须确保very_critical...()
将在最后发生。
快速搜索尝试在finally块中什么都没带(如果你给我一个重复的链接会删除问题),应该工作,但我不确定设计和可能存在的问题。
答案 0 :(得分:9)
我不会这样编写代码。我不喜欢嵌套try / catch / finally构造。我更喜欢每种方法一种。
我的偏好是用自己的方法包装每个调用。
try
{
operation1();
operation2();
...
}
finally
{
cleanup();
}
public void cleanup() {
try
{
finalizer_operation1();
finalizer_operation2();
}
finally
{
very_critical_finalizer_operation_which_should_occurs_at_the_end();
}
}
答案 1 :(得分:2)
当然是。如果控制流进入相应的finally
块,则try
块将执行。
唯一的例外是关闭VM的调用。