猿问

如何解释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){

            System.out.println("TEST");

            ex.printStackTrace();

        }


        System.out.println(d);

    }

将有两种打印顺序:


1个


TEST

java.lang.ArithmeticException: / by zero

    at Chapter10.Test2.main(Test2.java:14)

5

2个


java.lang.ArithmeticException: / by zero

    at Chapter10.Test2.main(Test2.java:14)

TEST

5

但是,当我评论该行时System.out.println("TEST");,将只有一个顺序:


5

java.lang.ArithmeticException: / by zero

    at Chapter10.Test2.main(Test2.java:14)

所以我想问一下try-catch块的执行顺序是什么顺序?为什么System.out.println(d);在catch发生异常时执行before块?


长风秋雁
浏览 214回答 3
3回答

倚天杖

默认情况下,Exception.printStackTrace()使用System.erras PrintStream,与as不同System.out。因此,代码执行的顺序为:System.out.println("TEST"); ex.printStackTrace(); System.out.println(d);可能与实际输出不一致。可以肯定的是,5将在之后打印TEST。可能会显示异常消息:前 TEST在TEST和之间5之后5。

墨色风雨

您需要与“ System.out”而不是“ printStackTrace()”一起使用。
随时随地看视频慕课网APP

相关分类

Java
我要回答