【问题标题】:good practice with try-finally in java?java中try-finally的好习惯?
【发布时间】:2013-05-15 18:17:48
【问题描述】:

今天遇到一个小问题,有这么一段代码,让我有点不舒服……

   try{
       //stuff...
   } finally {
       //finally stuff
   }

我想知道当try 中发生异常并重新抛出给处理它的调用者时,这种实现是否是一种好习惯。这是否等同于下面的代码?

    try{
        //code....
    } catch (Exception e) {
        //handling...
    } finally {
        //finishing up
    }

【问题讨论】:

标签: java try-catch-finally try-finally


【解决方案1】:

由于您已经给出的原因,它不等效:在第一种情况下仍然抛出异常。并且可能有一些原因,您确实想要这种行为:关闭资源,例如流在finally 块中,但将异常抛出封闭方法,在其他地方处理。

顺便说一句,你也可以“滥用”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();
    }
}

【讨论】:

  • 谢谢,就我而言,正如您所描述的那样,这是一种“滥用”。顺便说一句,很好的例子......
【解决方案2】:

不完全是,没有catchtry/finally 块相当于

try {
    // ...
} catch (Exception e) {
    throw;
} finally {
    // finishing up
}

你只是重新抛出异常而不处理它。如果您打算这样做,省略 catch 块很好,它可以提高代码的可读性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 2011-10-31
    • 1970-01-01
    • 2012-08-22
    • 2015-09-05
    • 2011-11-17
    • 2011-02-13
    相关资源
    最近更新 更多