在tray-catch 语句中,如果有 finally 则表示:finally 块中的语句一定会执行,而且是最后执行。
那么如果在 catch 块 finally 块中都有 return 语句时,return 的会是哪一个呢?我们来做个实验:
public class TryReturn {
/**
* @param args
*/
public static void main(String[] args) {
int a[] = {0, 1, 2};
int b = testReturn(a);
System.out.println("b = " + b);
}
private static int testReturn(int[] a) {
try {
int aa = a[4];
System.out.println(aa);
} catch (Exception e) {
System.out.println("exception");
return 1;
} finally {
System.out.println("finally");
return 2;
}
}
}
exception
finally
b = 2
也就是说,当执行到 catch 中的 return 时,程序并没有返回,而是执行 finally 中的语句,当执行到 return 时,程序返回。
简单的说就一句话:在try-catch-fianlly 块中,如果 finally 中有 return 语句,那么不管 try-catch 中是否有 return语句,都执行 finally 中的 return。