Try-Catch-Finally执行顺序

时间:2014-04-20 11:34:56

标签: java execution try-catch-finally

以下是演示我的观点(java)的代码:

public static int getSize(List<String> list)
{
    System.out.println("begin");
    try
    {
        System.out.println("get list size");
        return list.size();
    }
    catch (Exception e)
    {
        System.err.println("exception");
    }
    finally
    {
        System.out.println("finally");
        return -1;
    }
}

public static void main(String[] args) 
{
    List<String> list = null;
    int size = getSize(list);
    System.out.println("list size: " + size);
}

我期待输出:

begin
get list size
exception
finally
list size: -1

相反,我得到其他东西和上面的那个...就像异常可以在获取列表大小之前和异常之后显示...

e.g。

begin
exception
get list size
finally
list size: -1

begin
get list size
finally
exception
list size: -1

为什么这样做?什么是正确的输出?

1 个答案:

答案 0 :(得分:5)

System.out和System.err是不同的流。 当strem flush时显示测试。由于它们不同,您无法确定每次冲洗何时发生。 尝试在System.out中显示异常并查看差异。