每次运行代码时,我都会得到不同的输出序列。请帮帮我..为什么会这样?
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();
}
}
答案 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