Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in Java by (10.2k points)

On a question for Java at the university, there was this snippet of code:

class MyExc1 extends Exception {}

class MyExc2 extends Exception {}

class MyExc3 extends MyExc2 {}

public class C1 {

    public static void main(String[] args) throws Exception {

        try {

            System.out.print(1);

            q();

        }

        catch (Exception i) {

            throw new MyExc2();

        }

        finally {

            System.out.print(2);

            throw new MyExc1();

        }

    }

    static void q() throws Exception {

        try {

            throw new MyExc1();

        }

        catch (Exception y) {

        }

        finally {

            System.out.print(3);

            throw new Exception();

        }

    }

}

I was asked to give its output. I answered 13Exception in thread main MyExc2, but the correct answer is 132Exception in thread main MyExc1. Why is it that? I just can't understand where does MyExc2 go.

1 Answer

0 votes
by (46k points)

Based on reading your answer and seeing how you likely came up with it, I believe you think an "exception-in-progress" has "precedence". Keep in mind:

When an new exception is thrown in a catch block or finally block that will propagate out of that block, then the current exception will be aborted (and forgotten) as the new exception is propagated outward. The new exception starts unwinding up the stack just like any other exception, aborting out of the current block (the catch or finally block) and subject to any applicable catch or finally blocks along the way.

Note that applicable catch or finally blocks includes:

When a new exception is thrown in a catch block, the new exception is still subject to that catch's finally block, if any.

Now retrace the execution remembering that, whenever you hit throw, you should abort tracing the current exception and start tracing the new exception.

Related questions

Browse Categories

...