小疯之前遇到一个问题,就是关于return和finally的执行顺序问题,其实关于这个问题小疯许久之前在一篇博客中看到了解答,不过由于时间间隔找不到了,所以小疯今天在这里记录一下:
执行顺序是:先try 若有异常就catch,然后finally,之后执行catch中的return,如果finally中也有return,那么久直接出去不执行catch中的return。
1、finally中也有return语句如下:
public class TryTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(TryTest.test());
}
public static String test() {
try {
System.out.println("try");
throw new Exception();
} catch(Exception e) {
System.out.println("catch");
return "return";
} finally {
System.out.println("finally");
return "return in finally";
}
}
}
执行结果如下:
try
catch
finally
return in finally
可见顺序是先执行try中的输出语句然后在异常处调到catch语块,然后执行到catch中的return处没有执行return而是跳转到finally中执行。
2、finally中没有return语句:
public class TryTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(TryTest.test());
}
public static String test() {
try {
System.out.println("try");
throw new Exception();
} catch(Exception e) {
System.out.println("catch");
return "return";
} finally {
System.out.println("finally");
//return "return in finally";
}
}
}
执行结果如下:
try
catch
finally
return
可见执行顺序是先执行try中的输出语句然后在异常处调到catch语块,然后执行过catch的输出语句跳转到finally中执行之后返回到catch中的return语句。