Machine-translated by Google. Questions are authored in English.
Top

Discussion

What will be the output of the program?

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");  
        } 
    } 
}

  • A.Ex0 caught
  • B.exception caught
  • C.Compilation fails because of an error at line 2.
  • D.Compilation fails because of an error at line 9.

Answer: A

Correct answer: Ex0 caught

A catch clause matches any exception assignable to its declared type, and Exc1 extends Exc0, so the first catch handles it. Nothing about the code fails to compile: the ordering is legal precisely because the more specific type comes first - had catch (Exception e) been written above it, the compiler would have rejected the second block as unreachable.

No comment is present. Be the first to comment.
Loading…

Post your comment

Please log in or register to post a comment.