在java中使用try-finally的好习惯?

lrl*_*lrl 1 java try-catch-finally try-finally

今天我遇到了一个小问题,我有一段这样的代码,这让我有点不舒服......

   try{
       //stuff...
   } finally {
       //finally stuff
   }
Run Code Online (Sandbox Code Playgroud)

我想知道这样的实现是否是一个很好的做法,在何时发生异常try并被重新抛给处理它的调用者.这相当于下面的代码吗?

    try{
        //code....
    } catch (Exception e) {
        //handling...
    } finally {
        //finishing up
    }
Run Code Online (Sandbox Code Playgroud)

qqi*_*ihq 5

它不等同,因为你已经给出的原因:在第一种情况下仍然抛出异常.并且可能有一些原因,您确实需要这样的行为:关闭资源,例如finally块中的Streams ,但是将异常抛出封闭方法,以便在其他地方处理它.

顺便说一下,你也可以"滥用" try- finally构造,以防万一没有例外:

private StringBuilder buffer = new StringBuilder();

private String getBuffer() {
    try {
            // return current String content of the buffer
            return buffer.toString();
    } finally {
            // assign a new StringBuilder, before method returns
            buffer = new StringBuilder();
    }
}
Run Code Online (Sandbox Code Playgroud)