java try catch什么时候程序流程中断?

时间:2014-11-18 12:24:42

标签: java try-catch

你好,我不熟悉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部分需要做什么来中断程序或让程序继续?

5 个答案:

答案 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块。

如果在returntry块中执行了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 !