为什么输出每次都不同?尝试捕获最终异常代码

时间:2015-08-11 08:05:37

标签: java exception

class TestExceptions {

    public static void main(String[] args) throws Exception {
        try {
            System.out.println("try");
            throw new Exception();
        } catch(Exception e) {
            System.out.println("catch");
            throw new RuntimeException();
        } finally {
            System.out.println("finally");
        }
    }
}

以下是我尝试多次在eclipse中运行代码时的输出。我相信到目前为止,无论何时执行try / catch块的代码的最后一行(可以返回或抛出新的Exception()类型的stmt),最后都会执行块,但这里的输出不同每次?任何人都可以澄清我的假设是对还是错?

try
catch
Exception in thread "main" finally
java.lang.RuntimeException
    at TestExceptions.main(TestExceptions.java:9)


Exception in thread "main" try
catch
java.lang.RuntimeException
    at TestExceptions.main(TestExceptions.java:9)
finally

2 个答案:

答案 0 :(得分:9)

这显然是因为eclipse正在打印error streamoutput stream而没有在控制台中进行适当的同步。很多人因此而看到了问题。

在命令提示符下执行程序,每次都会看到正确的输出。

答案 1 :(得分:0)

在同意@Codebender的同时,你可以替换所有的异常并用printStackTrace()替换它们;然后异常和输出将打印在syn中。 EG:

 public static void main(String[] args) throws Exception {
        try {
            System.out.println("try");
            throw new Exception();
        } catch(Exception e) {
            System.out.println("catch");
            e.printStackTrace();
        } finally {
            System.out.println("finally");
        }
    }
}