Java 关于试捕的问题
我在理解Java 关于试捕的问题,java,android,exception-handling,try-catch,Java,Android,Exception Handling,Try Catch,我在理解try{}catch(异常e){…}如何工作时遇到问题 假设我有以下几点: try { while(true) { coord = (Coordinate)is.readObject();//reading data from an input stream } } catch(Exception e) { try{ is.close(); socket.close(); } catch(Ex
try{}catch(异常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(){………}
街区
我的问题如下:
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();
}
}
抛出异常后,退出循环while()
并到达
catch(){
}
我的程序会继续执行他的命令并转到第2节吗?只要异常被捕获?或者一切都以第一个
catch()
?结束捕获异常后,try/catch块后继续执行。在这种情况下,这是你的第2部分
未捕获的异常将终止线程,这可能会终止进程 只要catch子句中没有抛出异常,程序将在catch(或finally)子句之后继续执行。如果需要从catch子句中重新调用异常,请使用throw;或抛出新异常(ex)。不要使用throw ex,因为这将改变异常的堆栈跟踪属性。我认为您希望在第一次捕获[
catch(异常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!
}
}
是的,你说得对。它将移动到第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 ....
}
}
是的,它将转到第二节,你们可以通过实验来证实。还有别的吗?实验这些东西几乎不需要一分钟。除非你正在阅读一本书,并且永远不想在你的计算机上尝试它们。当你知道你要捕获什么样的异常时,最好不要用catch(exception ex){}block吃掉所有的错误。你真的必须复制并粘贴我的回答作为新的答案吗?@Chris:你的答案是正确的,但是OP必须知道,只有当特定代码必须执行时,他才必须最终使用。。顺便说一句,我对你的答案投了赞成票+1 :)