public class TestDemo
{
public static String output = "";
public static void foo(inti)
{
try
{
if (i == 1)
{
throw new Exception();
}
}
catch (Exception e)
{
output += "2";
return ;
} finally
{
output += "3";
}
output += "4";
}
public static void main(String[] args)
{
foo(0);
foo(1);
System.out.println(output);
}
}
1.执行foo(0)时,不满足try语句块中的if语句,所以不会抛出异常,执行finally语句
2.执行foo(1)时,满足try中的If语句,抛出异常,在catch中进行异常处理,虽然有return语句,但是finally中的内容必须执行,也就是说要先执行了finally才进行return操作,return后 output += “4”将不会再执行.
---------------------------------------------------------------------------------------------------------------------------------
谁说finally块必须执行?不服来辩
try-catch-finally块中,finally块在以下几种情况将不会执行。
(1)finally块中发生了异常。
(2)程序所在线程死亡。
(3)在前面的代码中用了System.exit();
(4)关闭了CPU