面试题
一道面试题,题目如下
public static int abc (){
int b = 20;
try {
b = b/0;
} catch (Exception e){
return b += 15;
} finally {
b += 50;
}
return b;
}
public static void main(String[] args) {
System.out.println(abc());
}
问输出的结果为多少,最开始想的是85,但是结果为35
分析
查资料加分析后得知
在程序中每一行代码和函数进方法栈一样,catch中的return b += 15也是先执行到那里,然后最后去执行finally中的代码,当finally中代码执行后,return才会生效,所以是35。
拓展
如果代码变成
public static int abc (){
int b = 20;
try {
b = b/0;
} catch (Exception e){
return b += 15;
} finally {
return b += 50;
}
}
public static void main(String[] args) {
System.out.println(abc());
}
可以发现finally中也有一个return,那么两个return也会去执行,但是第二个return会覆盖第一个return,所以结果为85。
总结
加深try catch finally 和return的记忆,这道题确实考的有点细,灯下黑了。