在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
