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的。因为对于复杂类型,保存的是它的地址。

浙公网安备 33010602011771号