try-catch-finally中,在catch里return了,是否还会执行finally
代码:
public class Demo { public static int getNum() { int a = 0; try { a = 1 / 0; } catch (Exception e) { System.out.println("catch"); a = 2; return a; } finally { System.out.println("finally"); a = 3; } return a; } public static void main(String[] args) { int num = getNum(); System.out.println(num); } }
输出结果:
catch finally 2
分析:
1、众所周知,正常情况下finally模块代码肯定会执行,所以可以理解“System.out.println("catch");”、“System.out.println("finally");”的执行。
2、虽然finally执行了,最后的“num”为"2"。因为在catch中”return a“时,已经把"a=2"返回了,即“getNum()”已经有返回值了!此时虽然还会执行finally模块,却是在返回结果后把a的值改成了"3"。