如何在Java中表示try-catch的输出顺序?

如何在Java中表示try-catch的输出顺序?,java,try-catch,Java,Try Catch,我发现一个有趣的例子: public static void main(String[] args) { int a =0; int b = 2; int c = 10; int d = 0; int e = 0; try { d=c/b; e=b/a; }catch (ArithmeticException ex){

我发现一个有趣的例子:

public static void main(String[] args) {
        int a =0;
        int b = 2;
        int c = 10;
        int d = 0;
        int e = 0;

        try {
            d=c/b;
            e=b/a;
        }catch (ArithmeticException ex){
            System.out.println("TEST");
            ex.printStackTrace();
        }

        System.out.println(d);
    }
将有两种打印顺序:

一,

二,

但是当我注释行
System.out.println(“TEST”),将只有一个订单:

5
java.lang.ArithmeticException: / by zero
    at Chapter10.Test2.main(Test2.java:14)

我想问一下try-catch块的执行顺序是什么?为什么
System.out.println(d)catch
块之前执行的代码>默认情况下,
exception.printStackTrace()
使用
System.err
作为
PrintStream
,这与
System.out
不同。因此,代码执行的顺序是:

System.out.println("TEST");
ex.printStackTrace();
System.out.println(d);
可能与实际输出不一致。当然,
5
将在
测试后打印。可能会打印异常消息:

  • 测试前
  • 测试
    5之间
  • 5之后

  • printStackTrace
    写入
    System.err
    ,这是一个与
    System.out
    不同的流。将代码更改为
    ex.printStackTrace(System.out)
    以获得一致的输出

        public static void main(String[] args) {
        int a =0;
        int b = 2;
        int c = 10;
        int d = 0;
        int e = 0;
    
        try {
            d=c/b;
            e=b/a;
        }catch (ArithmeticException ex){
            System.out.println("TEST");
            ex.printStackTrace(System.out);
        }
    
        System.out.println(d);
    }
    
    将屈服

    试验

    java.lang.arithmetricException:/by零

    在第10章Test2.main(Test2.java:18)

    五,


    正如所料。

    您需要使用“System.out”而不是“printStackTrace()”

    别忘了
    System.out
    System.err
    是不同的输出,可能在不同的时间刷新。@down选民请告诉我哪里出错:)
    System.out.println("TEST");
    ex.printStackTrace();
    System.out.println(d);
    
        public static void main(String[] args) {
        int a =0;
        int b = 2;
        int c = 10;
        int d = 0;
        int e = 0;
    
        try {
            d=c/b;
            e=b/a;
        }catch (ArithmeticException ex){
            System.out.println("TEST");
            ex.printStackTrace(System.out);
        }
    
        System.out.println(d);
    }