每次运行代码时,我都会得到不同的输出序列

时间:2017-03-05 10:55:17

标签: java

每次运行代码时,我都会得到不同的输出序列。请帮帮我..为什么会这样?

public class Hello {
    public static abstract class b {
        b() {
            System.out.println("Abstract Class Constructor");
        }

        public abstract void display();
    }

    public static class d extends b {
        d() {
            System.out.println("Subclass Constructor");
        }

        public void display() {
            System.out.println("Function Over-Ridden");
            throw new ArithmeticException("Division by Zero");
        }
    }
    public static void main(String[] args){
        d a=new d();
        a.display();
    }
}

2 个答案:

答案 0 :(得分:4)

输出的顺序始终是:

Abstract Class Constructor
Subclass Constructor
Function Over-Ridden
Exception in thread "main" java.lang.ArithmeticException: Division by Zero

但是,前3个写入标准输出,而最后一个写入标准错误。这两个流的输出在控制台窗口中交错显示,这使得它看起来在不同的运行中顺序不同。

如果您将System.out.println语句更改为System.err.println,则所有输出都将写入相同的流,并始终以相同的顺序显示。

答案 1 :(得分:0)

问题是,您的println写入标准输出,但是当您抛出异常时,它会被转储到错误输出中。通常当你混合这两个流时,这些行可能会在两者之间混淆。

您可以更改println以使用错误流来防止这种混淆:

System.err.println("..."); //notice the err part