try-catch-finally执行顺序

try-catch-finally的执行顺序是:try->catch->finally。即try执行完后,才执行finally。或者try中产生了异常,会执行catch中的代码,最后执行finally的代码。但是切记:finally的代码,是在try或者catch代码块的return之前执行。

注意:finally中不要写return,否则会导致try和catch中的return失效。因为finally中return了,就不会再执行try中的return或者catch中的return了。

还有一点注意,try和catch块return之前,会执行finally代码。然后执行finally之前,会暂时保存需要return的信息,执行完finally后,再return保存的信息。

 1 public static void main(String[] args) {
 2 
 3     System.out.println(testReturn());
 4 }
 5 
 6 
 7 private static int testReturn() {
 8     int i = 1;
 9     try {
10         i++;
11         System.out.println("try:" + i);
12         return i;
13     } catch (Exception e) {
14         i++;
15         System.out.println("catch:" + i);
16         return i;
17     } finally {
18         i++;
19         System.out.println("finally:" + i);
20     }
21 }

执行结果:

1 try:2
2 finally:3
3 2

这里,restReturn返回的是2,而不是3。
如果i不是基本类型,而是List等这种复杂类型,finally中对它的改变,是会影响return的。因为对于复杂类型,保存的是它的地址。

posted @ 2019-10-09 23:01  潜台词  阅读(1306)  评论(0)    收藏  举报