把尝试捕捉最终块在另一个最终块内

2022-09-01 15:17:01
 try {
 } catch() {}
 finally {
     try {
     } catch() { }
     finally { }
 }

有上面这样的代码好吗?


答案 1

是的,您可以执行此操作。

实际上,在处理要正确关闭的流时,您甚至需要执行此操作:

InputStream in = /* ... */;
try {
} catch (...) {
} finally {
    try {
        in.close();
    } catch (...) {
    } finally {
    }
}

我没有看到任何情况下这将是一个不好的做法


答案 2

为了便于阅读,您可以将嵌套的 try-catch 分解为单独的方法,例如:

  try{
  }catch(){}
  finally{
    cleanup();
  }

第二个 try-catch 可以在清理方法内部。

为了在 IO 包中支持上述模式,JAVA6 引入了一个名为 Closeable 的新类,所有流都实现了该类,以便您可以拥有一个清理方法,如下所示:

public static boolean cleanup(Closeable stream)
{
try{
    stream.close();
    return true;
  }catch(){
    return false;
  }
}

推荐