前言,前一段时间的代码
使用到了流 (ByteArrayOutputStream)
把输出的内容显示到页面上。
出现了问题,代码没有显示完全。
于是在finally块,中添加了flush处理,但是没有效果
原因是,虽然finally块中的内容一定会被执行,
程序会先执行return,最后再执行fianlly块中的内容。
所以,flush写在Finally中是没有效果的。
看一下下面的代码就会明白,下面代码的返回值是1,不是101.
public static int getValue001(){
int i = 0;
try {
i=1;
return i;
} catch (Exception e) {
;
} finally {
i = i + 100;
}
return i;
}
在try语句中,在执行return语句时,要返回的结果已经准备好了,
就在此时,程序转到finally执行了。
在转去之前,try中先把要返回的结果存放到不同于x的局部变量中去,执行完finally之后,在从中取出返回结果,
因此,即使finally中对变量x进行了改变,但是不会影响返回结果。
它应该使用栈保存返回值。
换句话说,虽然finally中对流进行flush操作了,但是不会影响返回结果。
使用的还是没有flush的返回值。