我得到这个程序的不规则输出?为什么?

I'm getting irregular output for this program? Why?

最后的例子

public class FinallyExample {

    public static void main(String[] args) {
        new FinallyExample().dothework();
    }
    public void dothework()
        {
            Object o=null;
            for(int i=0;i<=4;i++)
            {
                System.out.println(" "+i);
        try{ o=makeObj(i);}catch(IllegalArgumentException e){System.err.println("Error: ("+e.getMessage()+").");}
            finally{System.err.println("All done");
            /*if(o==null)
            {
                System.exit(0);
            }*/
            }
            System.out.println(o);
        }
        }
    public Object makeObj(int type) throws IllegalArgumentException
    {
        if(type==1) throw new IllegalArgumentException ("Don't like type"+type);
        return null;
        }
}

输出顺序总是不同的!

我正在使用 eclipse。

O/P- 全部做完 错误:(不喜欢 type1)。 0 //当 i=1 时应该打印这一行 无效的 1

全部完成 无效的 2个 全部做完 无效的 3个 全部做完 无效的 4个 全部做完 空

O/P- 0 全部完成 1

错误:(不喜欢 type1)。 全部做完 无效的 2个 全部做完 无效的 3个 全部做完 无效的 4个 全部做完 空

基本上,您正在写信给 System.outSystem.err。目前还不清楚(并且特定于实现)它们将缓冲多少数据,或者它们何时被刷新,但您不必期望每次都保持一致。

我预计在写入 System.out 后调用 System.out.flush() 并在写入 System.err 后调用 System.err.flush() 会解决这个问题 - 但至少在 Eclipse 中,它不会'似乎没有。 (运行 Windows 命令提示符中的相同代码每次都会给出相同的输出,即使没有刷新。)

基本上,这似乎是 Eclipse 控制台实现的产物。我不会担心 - 当你试图诊断事情时要注意它。 (如果将所有诊断输出发送到同一个流,则不会有问题。)