当我运行以下代码时,有两个结果。
package scjp;
public class ExceptionTest {
public static void main(String[] args) {
ExceptionTest test = new ExceptionTest();
test.method1();
}
public void method1() {
try {
System.out.println("Try Block");
if (!true) {
return;
} else {
throw new RuntimeException();
}
}finally {
System.out.println("Finally Block");
}
}
}
一个结果是
Try Block
Exception in thread "main" java.lang.RuntimeException
at scjp.ExceptionTest.method1(ExceptionTest.java:17)
at scjp.ExceptionTest.main(ExceptionTest.java:7)
Finally Block
和另一个,
Try Block
Finally Block
Exception in thread "main" java.lang.RuntimeException
at scjp.ExceptionTest.method1(ExceptionTest.java:17)
at scjp.ExceptionTest.main(ExceptionTest.java:7)
每次运行上面的代码时,答案都在变化。在我的理解中,它应该始终是相同的结果。你能帮帮我什么吗?
答案 0 :(得分:5)
系统错误输出流(上面的堆栈跟踪,可能在控制台中为红色)与系统输出流(您的System.out.println()
语句)不同。因此,错误消息可能与正常的控制台输出不同步,因为两个流都写入控制台,但彼此独立。差异如下:
System.out.println("Some text");
打印到外线
System.err.println("Error occurred!");
打印到错误流
输出到同一控制台时,两者可以混合。
答案 1 :(得分:0)
异常堆栈跟踪不会打印在同一outputstrean上(它打印在System.err上),System.err和System.out不会同步。
要始终使用相同的输出,您可以在System.err而不是System.out上打印消息。