2

当我运行以下代码时,有两个结果。

 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)

每次我运行上述代码时,答案都会发生变化。据我了解,它应该始终是相同的结果。你能帮我什么吗???

4

2 回答 2

5

系统错误输出流(上面的堆栈跟踪,可能在您的控制台中以红色显示)与系统输出流(您的System.out.println()语句)不同。因此,错误消息可能与正常的控制台输出不同步,因为两个流都写入控制台,但彼此独立。区别如下:

System.out.println("Some text");

打印到输出流

System.err.println("Error occurred!");

打印到错误流

输出到同一个控制台时,两者可能会混合在一起。

于 2013-02-28T11:28:42.323 回答
0

异常堆栈跟踪未打印在相同的输出流上(它打印在 System.err 上)并且 System.err 和 System.out 不同步。

要始终获得相同的输出,您可以在 System.err 而不是 System.out 上打印消息。

于 2013-02-28T11:31:59.003 回答