Challenge - 5 Problems
Multiple Catch Blocks Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
β Predict Output
intermediate2:00remaining
Output of multiple catch blocks with specific exceptions
What is the output of the following Java code snippet?
Java
public class Test { public static void main(String[] args) { try { int[] arr = new int[2]; System.out.println(arr[5]); } catch (ArithmeticException e) { System.out.println("ArithmeticException caught"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("ArrayIndexOutOfBoundsException caught"); } catch (Exception e) { System.out.println("General Exception caught"); } } }
Attempts:
2 left
π‘ Hint
Think about which exception is actually thrown and which catch block matches it first.
β Incorrect
The code throws an ArrayIndexOutOfBoundsException because it tries to access index 5 in an array of size 2. The catch block for ArrayIndexOutOfBoundsException matches this exception and executes, printing "ArrayIndexOutOfBoundsException caught".
β Predict Output
intermediate2:00remaining
Which catch block executes for NullPointerException?
Given the code below, which catch block will handle the exception?
Java
public class Test { public static void main(String[] args) { try { String s = null; System.out.println(s.length()); } catch (IllegalArgumentException e) { System.out.println("IllegalArgumentException caught"); } catch (NullPointerException e) { System.out.println("NullPointerException caught"); } catch (Exception e) { System.out.println("General Exception caught"); } } }
Attempts:
2 left
π‘ Hint
What happens when you call a method on a null reference?
β Incorrect
Calling length() on a null String throws a NullPointerException. The catch block for NullPointerException matches and executes, printing "NullPointerException caught".
π§ Debug
advanced2:00remaining
Identify the compilation error in multiple catch blocks
Why does the following code cause a compilation error?
Java
public class Test { public static void main(String[] args) { try { int a = 5 / 0; } catch (Exception e) { System.out.println("Exception caught"); } catch (ArithmeticException e) { System.out.println("ArithmeticException caught"); } } }
Attempts:
2 left
π‘ Hint
Remember the order of catch blocks matters when exceptions have inheritance relationships.
β Incorrect
ArithmeticException is a subclass of Exception. The first catch block catches all Exceptions, so the second catch block for ArithmeticException is unreachable, causing a compilation error.
β Predict Output
advanced2:00remaining
Output when multiple exceptions are possible
What will be printed when running this code?
Java
public class Test { public static void main(String[] args) { try { int[] arr = null; System.out.println(arr.length); int a = 5 / 0; } catch (NullPointerException e) { System.out.println("NullPointerException caught"); } catch (ArithmeticException e) { System.out.println("ArithmeticException caught"); } catch (Exception e) { System.out.println("General Exception caught"); } } }
Attempts:
2 left
π‘ Hint
Which exception happens first in the try block?
β Incorrect
The first statement in try throws NullPointerException because arr is null. The catch block for NullPointerException executes and prints "NullPointerException caught". The division by zero is never reached.
π§ Conceptual
expert2:00remaining
Why must catch blocks be ordered from specific to general?
In Java, why should catch blocks for exceptions be ordered from the most specific to the most general exception type?
Attempts:
2 left
π‘ Hint
Think about how Java matches exceptions to catch blocks and what happens if a parent exception is caught first.
β Incorrect
If a general exception catch block (like Exception) is placed before a specific one (like ArithmeticException), the specific catch block becomes unreachable because the general one catches all exceptions of that type and its subclasses. This causes a compilation error.