Java 异常处理:在同一代码的每次运行中获得不同的输出

Java 异常处理:在同一代码的每次运行中获得不同的输出,java,exception-handling,try-catch,try-catch-finally,try-finally,Java,Exception Handling,Try Catch,Try Catch Finally,Try Finally,我在程序的每次运行中得到不同的输出。当第一次执行时,它给出 当再次执行时,它 请告诉我为什么会这样 public class TwoExcepProg { public static void main(String[] args) { try { int a = 50/0; } finally { System.out.println("finally blo

我在程序的每次运行中得到不同的输出。当第一次执行时,它给出

当再次执行时,它 请告诉我为什么会这样

public class TwoExcepProg {
    public static void main(String[] args) {
        try
        {
            int a = 50/0;
        }
        finally
        {
            System.out.println("finally block is called");
        }
    }
}

您允许传播使程序崩溃的异常

在这些情况下,您不应该期望停止程序的异常的输出(由
System.err.println()
方法写入的输出)和
finally
语句中写入的输出(由
System.out.println()方法写入的输出)出现优雅而严格的顺序因为这是两个不同的流,不一定同时冲洗

您应该处理异常以防止此行为:

public static void main(String[] args) {
    try {
        int a = 50 / 0;
    } 
    catch (Exception e) {
        // exception handling
    }
    finally {
        System.out.println("finally block is called");
    }
}

我花了一秒钟才到那里。问题是,这两条信息会流向两条不同的溪流。@GhostCat只是为了避免将来发生任何危险,我没有否决你的答案:)@ChandlerBing谢谢你提供的信息。但是别担心。我绝对讨厌报复选民。有时我可能会做一些不完全符合这里严格规定的事情;但我从来没有对内容投过反对票,因为我和其他用户有“问题”。对我不赞成的内容投了反对票;最后,为了回应您的评论:执行顺序是try-block、catch-block、finally-block。正是按照这个顺序。正如本主题的任何书籍或教程中所写的那样。DV,因为解释是错误的。OP使用异常的事实在这里并不重要。问题完全基于OP写入两个独立刷新的不同流这一事实。您可以使用一个简单的
for(int i=0;i<5;i++){System.out.println(i);System.err.println(i);}
来测试这一点,哇:)@Tom谢谢你的介绍:)这不是真的对:OP不会写两条不同的流。他向流(System.out)写入数据。System.err写入是因为他让异常使程序崩溃。@Tom解释真的没有错。我并没有详述这些要点。我更新了。哦,是的,没错,由于异常,他间接写信给“serr”。谢谢你更新答案。