如何正确关闭资源?

kan*_*e77 1 java exception-handling

我有方法,所有传播异常,然后我在一个地方处理,但我意识到了一些事情.

假设我有这样的方法

public void foo() throws Exception e {
  Statement stmt = createStatement();
  doSomething(stmt);
  stmt.close();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果doSometing()方法抛出异常,语句将不会被关闭,但我不想在那里处理异常.是尝试捕获的唯一方法,只重新抛出异常,最后关闭声明?

nos*_*nos 6

public void foo() throws Exception e {

  Statement stmt = null ; 
  try {
    stmt = createStatement();
    doSomething(stmt);
  } finally {
    if(stmt != null) 
      stmt.close();
  }
}
Run Code Online (Sandbox Code Playgroud)