try,catch和finally的执行顺序是什么

时间:2013-12-12 08:15:43

标签: java exception

如果我们在try中给出这样的return语句,那么执行的顺序是什么

try{
--- ----
-----
return a;
}

catch{
}
finally{
}

如果在try中有返回,这将是执行顺序。请让我知道

7 个答案:

答案 0 :(得分:2)

http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20.2

总是执行

finally。如果return中有try,则trycatch的其余部分不会执行,然后执行finally(从最内层到最外层),然后功能退出。

答案 1 :(得分:1)

首先,您需要获取文档并正确理解这些概念,您可以参考这些文档

http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20.2

这里有stackoverflow没有人应该解释,因为这个网站基本上不是一个完整的目的。

答案 2 :(得分:0)

在评估return语句之后,最后总是执行。

答案 3 :(得分:0)

无论是什么情况finally总会执行。 在成功执行try的情况下,它不会执行catch阻止。如果try块抛出异常,则catch块将执行

答案 4 :(得分:0)

正常情况下,try-catch-finally的订单执行顺序为try,如果exception拖出并抓住execute catch。如果被捕获的异常finally将始终执行。

如果return中有try,则try中的执行将停在那里并执行finally。如果exceptionreturn正常执行顺序出现之前抛出并被捕获。

让我们运行以下代码

public static void main(String[] args) {
    String[] arr=getInfo();
    for(String i:arr){
        System.out.println(i);
    }
}

public static String[] getInfo(){
    String[] arr=new String[3];
  try {
      arr[0]="try";
      return arr;
  }catch (Exception e){
      arr[1]="catch";
      return arr;
  }finally {
      arr[2]="finally";
      return arr;
  }
}

Out put

try // return in try
null
finally // returning value in finally.  

现在这个问题解释了你想要的每一件事。在finally中有return时会try运行。

如果System.exit(0)中有tryfinally将无法执行。

答案 5 :(得分:0)

如果try中有返回,则控制将转到finally块,执行存在的代码然后退出。所以在这期间,如果在finally块中,try中返回的任何变量都有任何更改,如果在finally中返回相同的变量,则返回最新的。

try {
             i = 11;
             return i;
            } catch (Exception e) {
                // TODO: handle exception
            } finally{

                i = 12;
                return i; --> This will be returned
            }
        //return i;


     }

但如果只有修改,最后没有回溯,则try中返回的值将是最终值。

 try {
             i = 11; --> this will be returned
             return i;
            } catch (Exception e) {
                // TODO: handle exception
            } finally{

                i = 12; -- this will be executed

            }
        //return i;


     }

答案 6 :(得分:0)

try-catch处理中,当return来自try块时,它将超出try-catch-finally的范围..因为catch块只接受由try引发..而不是返回的东西,现在当你从try块返回时它不会到达try端并最终不会被执行,它会出try-catch-finally块,返回到你的代码。