LAPTOP-8KA88UT5_20200910-陈浩

问题

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);
    }
}

为什么输出结果时3423而不是34234?

解决:

首先执行foo(0),在try代码块中未抛出异常,finally是无论是否抛出异常必定执行的语句,

所以 output += “3”;然后是 output += “4”;

执行foo(1)的时候,try代码块抛出异常,进入catch代码块,output += “2”;

前面说过finally是必执行的,即使return也会执行output += “3”

由于catch代码块中有return语句,最后一个output += “4”不会执行。

所以结果是3423

吐槽

标签

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1