面试题:try{}里有return语句,那么后面的finally{}里的代码是否会执行,什么时候被执行?
答:会执行,在方法返回调用者前执行
注意:finally只能用在try/catch语句中,并且在try和catch执行完会立即执行,为了验证这点,见如下代码
public static void main(String[] args) { System.out.println(methodD()); } public static int methodD(){ int i = 1; try { return i; } catch (Exception e) { return i; } finally { System.out.println("finally exe"); i=2; } }此时输出为:
finally exe
1
说明虽然try里面进行了return,但是finally还是在return之前执行了,但是并没有修改return的值,输出的是1
public static void main(String[] args) { System.out.println(methodD()); } public static int methodD(){ int i = 1; try { } catch (Exception e) { return i; } finally { System.out.println("finally exe"); i=2; } return i; }此时输出为:
finally exe
2
finally同样执行了,同时也修改了return的值 ,说明finally实际上是在try/catch执行完就会立刻执行,如果try/catch中有return,会把return的数据暂时存储,执行完finally后再继续返回return的值,此时return的值不会被覆盖
测试环境:java8