[英]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.