在try的括号里面有return一个值,那在哪里执行finally里的代码?
A:不执行finally代码
B:return前执行
C:return后执行
答案:B
程序在走到try和catch的return之前会去检查finally,将return 后面的结果保存到本地变量表中,然后“先执行finally,再执行try或catch的return”.
下面一个例子:
如果在try里面返回的是一个保存了值的变量,即:return a;,finally块里面修改了a 的值,那么请看上面的红字部分。
public class Test{ public static int a(){ int a = 0; try{ a = 1; return a; } catch (Exception e) { a = 2; return a; } finally{ a = 3; } } public static void main(String[] args){ System.out.println(a()); } }
最终结果输出 1。
如果在执行finally块里面遇见return ,则优先执行finally里面的return。
例子:
public class Test{ public static int a(){ int a = 0; try{ a = 1; return a; } catch (Exception e) { a = 2; return a; } finally{ a = 3; return a; } } public static void main(String[] args){ System.out.println(a()); } }
输出结果为3
时间: 2024-10-10 23:06:38