未处理的异常的输出与程序的输出混淆
Output of the untreated exception mixing up with output of the program
当我运行这个程序在java
package test;
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println("line"+i);
}
System.out.flush();
int x=1/0;
}
}
我期待这样的输出:
line0
line1
line2
line3
line4
Exception in thread "main" java.lang.ArithmeticException: / by zero
at test.Main.main(Main.java:8)
Process finished with exit code 1
但输出如下所示:
Exception in thread "main" java.lang.ArithmeticException: / by zero
line0
at test.Main.main(Main.java:8)
line1
line2
line3
line4
Process finished with exit code 1
在我 运行 之后:
line0
Exception in thread "main" java.lang.ArithmeticException: / by zero
line1
at test.Main.main(Main.java:9)
line2
line3
line4
Process finished with exit code 1
等等。行或异常消息与输出 运行domly 混淆。
我尝试将 System.out.flush();
放在 int x=1/0;
之前,但它没有帮助。
这也发生在我创建自己的异常(它扩展了 RuntimeException)和创建 NullPointerException 时。为什么会发生这种情况,我该如何解决?
发生这种情况是因为异常是使用 System.err
打印的,PrintStream
不同于 System.out
。如果你想使用 System.out
打印异常,那么你可以调用 System#setErr
:
System.setErr(System.out);
for (int i = 0; i < 5; i++) {
System.out.println("line"+i);
}
int x = 1 / 0;
输出:
line0
line1
line2
line3
line4
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test/test.Test.main(Test.java:13)
当我运行这个程序在java
package test;
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println("line"+i);
}
System.out.flush();
int x=1/0;
}
}
我期待这样的输出:
line0
line1
line2
line3
line4
Exception in thread "main" java.lang.ArithmeticException: / by zero
at test.Main.main(Main.java:8)
Process finished with exit code 1
但输出如下所示:
Exception in thread "main" java.lang.ArithmeticException: / by zero
line0
at test.Main.main(Main.java:8)
line1
line2
line3
line4
Process finished with exit code 1
在我 运行 之后:
line0
Exception in thread "main" java.lang.ArithmeticException: / by zero
line1
at test.Main.main(Main.java:9)
line2
line3
line4
Process finished with exit code 1
等等。行或异常消息与输出 运行domly 混淆。
我尝试将 System.out.flush();
放在 int x=1/0;
之前,但它没有帮助。
这也发生在我创建自己的异常(它扩展了 RuntimeException)和创建 NullPointerException 时。为什么会发生这种情况,我该如何解决?
发生这种情况是因为异常是使用 System.err
打印的,PrintStream
不同于 System.out
。如果你想使用 System.out
打印异常,那么你可以调用 System#setErr
:
System.setErr(System.out);
for (int i = 0; i < 5; i++) {
System.out.println("line"+i);
}
int x = 1 / 0;
输出:
line0
line1
line2
line3
line4
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test/test.Test.main(Test.java:13)