流量控制除外

时间:2013-02-28 11:23:55

标签: java exception runtime

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

 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)

每次运行上面的代码时,答案都在变化。在我的理解中,它应该始终是相同的结果。你能帮帮我什么吗?

2 个答案:

答案 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上打印消息。