Java — Determine output when throwing a subclass exception and catching a superclass: class Exc0 extends Exception { } class Exc1 extends Exc0 { } /* Line 2 */ public class Test { public static void main(String args[]) { try { throw new Exc1(); /* Line 9 */ } catch (Exc0 e0) /* Line 11 */ { System.out.println("Ex0 caught"); } catch (Exception e) { System.out.println("exception caught"); } } }

Difficulty: Easy

Correct Answer: Ex0 caught

Explanation:

Introduction / Context:This validates understanding of exception inheritance and matching. A catch for a superclass type can handle exceptions of its subclass.

Given Data / Assumptions:

  • Exc1 extends Exc0, and both extend Exception (directly or indirectly).
  • The code throws new Exc1().
  • First catch handles Exc0, second catch handles Exception.

Concept / Approach:Java chooses the first catch whose parameter type is assignable from the thrown exception type. Since Exc0 is a superclass of Exc1, the first catch matches.

Step-by-Step Solution:

throw new Exc1() executes.catch (Exc0 e0) matches and executes, printing "Ex0 caught".Subsequent catch blocks are skipped.

Verification / Alternative check:Swap the two catch blocks and observe that "exception caught" would execute instead because Exception would match first.

Why Other Options Are Wrong:No compilation errors exist at the stated lines; the subclass relationship is valid. The second catch does not run because the first one already handled the exception.

Common Pitfalls:Expecting a more general catch to run after a specific one; only the first matching catch executes.

Final Answer:Ex0 caught

More Questions from Exceptions

Discussion & Comments

No comments yet. Be the first to comment!
Join Discussion