【问题标题】:question about try-catch关于try-catch的问题
【发布时间】:2011-09-10 05:50:09
【问题描述】:

我无法理解try{} catch(Exception e){...} 的工作原理!

假设我有以下内容:

try
{
    while(true)
    {
        coord = (Coordinate)is.readObject();//reading data from an input stream
    }
}
catch(Exception e)
{
    try{
        is.close();
        socket.close();
    }
    catch(Exception e1)
    {
        e1.printStackTrace();
    }
}

第 2 节

    try
    {
        is.close();
        db.close();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

假设我的while() 循环由于is 流的异常而引发错误。

这将使我摆脱无限循环并让我进入第一个catch(){............} 块。

我的问题如下:

抛出异常后,跳出循环while(),到达

catch(){ 
}

我的程序会继续执行并进入第 2 部分吗?只要异常被捕获?还是一切都以第一个catch()结尾?

【问题讨论】:

  • 是的,它将进入第二部分,您可以通过实验确认。还有别的吗?
  • 实验这些东西几乎不需要一分钟。除非您正在阅读一本书并且不想在您的计算机上尝试它们。
  • 当您知道要捕获哪种异常时,最好不要用 catch (Exception ex){} 块吃掉所有错误

标签: java android exception-handling try-catch


【解决方案1】:

是的,你是对的。它将移至第 2 节

如果您希望第 2 节一定会发生,而不管是否生成任何异常,您可能希望将它们包含在 finally 块中。

try {
    // Do foo with is and db
} 
catch (Exception e) {
    // Do bar for exception handling
}  

// Bound to execute irrespective of exception generated or not ....
finally {
      try {
          is.close();
          db.close();
        }
     catch (Exception e2) {
      // Exception description ....
    }
}

【讨论】:

  • 您真的必须复制并粘贴我的回复作为新答案吗?
  • @Chris :您的答案是正确的,但 OP 必须知道,只有在该 p'cular 代码必须执行时,他才必须使用 finally ..顺便说一句,我赞成您的答案.. +1 :)
【解决方案2】:

我认为您想在第一次捕获 [catch (Exception e)] 后使用 finally 关闭您的流:

try {
    // Do foo with is and db
} catch (Exception e) {
    // Do bar for exception handling
} finally {
    try {
        is.close();
        db.close();
    } catch (Exception e2) {
      // gah!
    }
}

【讨论】:

    【解决方案3】:

    只要在你的 catch 子句中没有抛出异常,你的程序就会在你的 catch(或 finally)子句之后继续执行。如果需要从 catch 子句重新抛出异常,请使用 throw;或抛出新的异常(ex)。不要使用 throw ex,因为这会改变异常的堆栈跟踪属性。

    【讨论】:

      【解决方案4】:

      异常被捕获后,在 try/catch 块之后继续执行。在这种情况下,这是您的第 2 部分。

      未捕获的异常将终止线程,这可能会终止进程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-25
        • 2011-02-23
        • 1970-01-01
        • 2011-11-28
        • 2011-08-26
        • 1970-01-01
        相关资源
        最近更新 更多