繁体   English   中英

关于try-catch的问题

[英]question about try-catch

我无法理解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 stream 的异常而引发错误。

这将使我摆脱无限循环并把我扔到第一个catch(){............}块中。

我的问题如下:

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

catch(){ 
}

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

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

我认为您想在第一次 catch [ 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!
    }
}

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

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

是的你是对的。 它将移至第 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 ....
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM