在try,catch和finally中执行的顺序是什么
这个问题在这里已经有了答案:
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
总是执行。 如果try
return
, try
和catch
的其余部分不会执行,然后finally
执行(从最内层到最外层),然后该函数退出。
首先你需要去阅读文档并正确理解这个概念,你可以参考这些文档
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没有人应该解释,因为这个网站基本不toturial的目的。
正常情况下,首先try
try-catch-finally
命令执行顺序,然后如果exception
发生并捕获将execute
catch
。 如果异常捕获与否finally
都会被执行。
如果return
你的try
,在执行try
将停在那里并且将执行finally
。 如果在return
正常执行顺序之前抛出并捕获exception
。
让我们运行下面的代码
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;
}
}
输出
try // return in try
null
finally // returning value in finally.
现在,这解释了你想要的每一件事。 finally
在try
return
运行。
如果在你的try
有一个System.exit(0)
, finally
不会执行。
上一篇: What is the order of execution in try,catch and finally