代码之家  ›  专栏  ›  技术社区  ›  Martijn

最后怎么用

  •  38
  • Martijn  · 技术社区  · 14 年前

    try {
        a;
        block;
        off;
        statements;
    } catch (Exception e) {
        handle;
        exception;
        e;
    } finally {
        do;
        some;
        cleanup;
    }
    

    一方面:

    try {
        a;
        block;
        off;
        statements;
    } catch (Exception e) {
        handle;
        exception;
        e;
    }
    do;
    some;
    cleanup;
    

    另一方面

    9 回复  |  直到 14 年前
        1
  •  39
  •   meriton    14 年前

    如果

    • 这个 try -通过抛出 java.lang.Throwable 那不是一个好主意 java.lang.Exception 例如,因为它是一个 java.lang.Error 例如 AssertionError OutOfMemoryError .
    • try块使用这样的控制流语句突然完成 continue break return
    • catch块突然完成(通过抛出任何throwable或使用控制流语句)

    更一般地说,java语言保证在try语句完成之前执行finally块(请注意,如果try语句没有完成,则不能保证finally的正确性。由于各种原因,语句可能无法完成,包括硬件关闭、操作系统关闭、虚拟机关闭(例如由于 System.exit Thread.suspend() , synchronized Object.wait() , Thread.sleep() )或者其他方面很忙(无休止的循环,,,)。

    所以,一个 finally

        2
  •  31
  •   JonyD    7 年前

    finally 块始终执行。

    最后 块用于清理,比如释放在中使用的资源 try / catch 尝试 抓住 阻止。

    唯一一次 块不执行是什么时候 system.exit() 尝试 / 抓住

    上面描述的错误是指Java应用程序退出时出现内存不足错误等情况。我看到一些反对票:(因为这个原因,似乎。

        3
  •  20
  •   Dan    14 年前

    catch 节本身可能引发异常、中断周围的块或从当前方法返回。那样的话 do; some; cleanup; 未执行。

    用一个 finally 布洛克,是的 放心 代码将被执行。

        4
  •  12
  •   Jon Skeet    14 年前

    捕获所有异常基本上是个坏主意—因此您需要考虑如果未捕获的异常从try/catch或try/catch/finally块中传播出来会发生什么。最后,你可以在出去的时候清理一下。

    • catch块可能引发异常
    • 您可能希望从try块返回

    然而 你离开了它(除了过程被很难终止),终于是你的朋友了。

        5
  •  9
  •   Jonathan Park    14 年前

    try{
      [some task] 
    }
    catch
    {
    }
    

    您要做的是捕获特定的已知错误。

    try{
      [some task] 
    }
    catch(Exception ex)
    {
       if([known execption])
         [ignore]
       else
         throw(ex);
    }
    [Cleanup]
    

    try{
      [some task] 
    }
    catch(Exception ex)
    {
       if([known execption])
         [ignore]
       else
         throw(ex);
    }
    finally
    {
       [Cleanup]
    }
    
        6
  •  8
  •   iandisme    14 年前

    “finally”块将始终执行。

    在第二个示例中,如果catch块重新引发异常,或者try块中发生未捕获的异常,则不会进行清理。

        7
  •  3
  •   Kyra    14 年前

    this GeekInterview论坛:

    finally块总是在try块退出时执行。这样可以确保即使发生意外异常,也会执行finally块。但是,finally不仅仅适用于异常处理,它允许程序员避免清除代码被返回、继续或中断意外绕过。将清理代码放入finally块始终是一种很好的做法,即使在没有预期异常的情况下也是如此。

        8
  •  0
  •   ligerdave    14 年前

    finally block将被执行。

    你在这里给出的两个片段之间的区别是:片段中的代码没有使用

    正确理解 ,你只需要知道 =保证!

        9
  •  0
  •   Nada Aldahleh    14 年前

    在第一个示例中,即使try子句中有return语句,finally块也总是被执行。只有当您有System.exit(0)时,它才不会被执行。