你好,我不熟悉Java中的异常处理,所以: 正如Topic在基本的try / catch块中所说,当我在Try块中捕获异常时,程序流何时中断?
try{
//some code that raises an Exception
}catch(Exception e){
// react to interrupt or continue program flow
}finally{
// always done after the catch
}
//when is this code executed?
finally语句总是在try catch之后执行,那么在catch部分需要做什么来中断程序或让程序继续?
答案 0 :(得分:1)
Catch()
块用于通知/处理异常。
从文档引用,
catch块包含在if和when时执行的代码 调用异常处理程序。运行时系统调用异常 处理程序是调用堆栈中第一个处理程序时的处理程序 ExceptionType匹配抛出的异常的类型。系统 如果抛出的对象可以合法地分配给它,则认为它是匹配的 异常处理程序的参数。
和
正如主题在一个基本的说法 try / catch块,当我在Try块中捕获异常时,程序流何时 中断?
Catch块用于处理异常。因此,如果没有错误Catch
阻止将不会被执行,但是finally()
将被执行
答案 1 :(得分:1)
如果你在catch块中捕获异常,并且finally块没有抛出任何异常,finally块之后的语句将在finally块执行后立即执行。
如果你没有捕获catch块中的异常,或者你在catch块或finally块中抛出一个新异常,那么finally块之后的语句将不会执行,而下一个代码就是将被执行的是最直接的封闭catch块,可以处理抛出的异常。
答案 2 :(得分:1)
try {
System.out.println("Throw exception");
int i = 5/0;
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
e.printStackTrace();
}finally{
System.out.println("Doubt solved if line prints");
}
System.out.println("After exception");
这里的代码是由你自己尝试的,我认为在执行这个直到tile异常发生之后将不需要解释它将直接转到catch然后它将转到finally的执行然后进一步的代码。
答案 3 :(得分:1)
当任何异常发生在任何地方时,指令流被中断。
如果异常发生在try
范围,和,则异常类可“分配给”catch
子句中指定的类,然后控制转移到catch块的开头。 (如果异常类不是“可赋值的”,则异常只是“冒泡”到下一个外部try
块或线程EH。)
如果catch
块没有抛出异常(或重新抛出原始异常),则异常被视为“已处理”,并且在catch
子句列表之后立即继续执行try
块。 1}}。这可能意味着在继续finally
结束之前,流进入finally
块。
如果未捕获到异常,或者在catch
块中(重新)发出异常信号,则在异常“冒泡”之前执行任何后续finally
块。
如果在return
或try
块中执行了catch
,那么在finally
生效之前执行任何return
。
答案 4 :(得分:0)
执行以下代码以了解异常的异常流程。
try {
//line 1
//line 2
throw new Exception(); //line 3
// line 4
// line 5
} catch (Exception e) {
// if exception occur at line 3, line 4 & 5 will not executed because of interrupt in execution flow.
// since your program is interrupted when exception occur.
System.out.println("Catch block will execute after exception !");
}finally{
System.out.println("Finally block will execute after exception !");
}
// your program will continue its execution.
System.out.println("Code after the finally block also exectute after the exception !");
<强>输出强>
Catch block will execute after exception !
Finally block will execute after exception !
Code after the finally block also exectute after the exception !