当我运行下面的代码时,有两个结果。
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)每次我运行上面的代码时,答案都在变化。在我的理解中,它应该总是相同的结果。你能帮我什么吗?
发布于 2013-02-28 19:28:42
系统错误输出流(上面的堆栈跟踪,很可能是控制台中的红色)与系统输出流( System.out.println()语句)不同。因此,错误消息可能与正常的控制台输出不同步,因为两个流都写入控制台,但彼此独立。区别如下:
System.out.println("Some text");打印到输出流
System.err.println("Error occurred!");打印到错误流
当输出到同一控制台时,这两者可能会混合在一起。
发布于 2013-02-28 19:31:59
异常堆栈跟踪不会在同一个outputstrean上打印(它在System.err上打印),System.err和System.out不同步。
要始终具有相同的输出,您可以在System.err上而不是在System.out上打印消息。
https://stackoverflow.com/questions/15134271
复制相似问题