Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于试捕的问题_Java_Android_Exception Handling_Try Catch - Fatal编程技术网

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 :)