public class Test22 {
public static void main(String[] args) {
System.out.println(tt());
}
public static int tt() {
int b = 23;
try {
System.out.println("yes");
return b = 88;
} catch (Exception e) {
System.out.println("catch");
} finally {
b = 90;
if (b > 25) {
System.out.println("b>25:" + b);
}
b = 10;
System.out.println("finally");
}
b = 100;
return b;
}
}
这段代码打印结果是什么?求分析。。。
Java
------解决方案--------------------
这个帖子分析得比较好^_^
关于 Java 中 finally 语句块的深度辨析
------解决方案--------------------
在try里面看到return和finally,先计算出return应该返回的值,暂存,再执行finally块,最后返回暂存的值。
所以你看到的是yes b>25:90 finally 88。其实真要你迷糊,b=90那句应该去掉。然后你会看到b>25:88,这样才能证明我说的是对的
这里return b=88;变成了这样:
int temp ret = (b = 88);
// b变成了88
finally {
...
}
return temp;
------解决方案--------------------
任何执行try 或者catch中的return语句之前,都会先执行finally语句,如果finally存在的话。
所以这段代码的话,先执行try,打印出yes;在return之前执行finally中语句打印出 b>25:90
finally,最后执行try中的return语句 b=88。所以最终结果为88.