Java Multiple Catch Blocks: Efficiently Handle Multiple Exceptions

Learn how to use multiple catch blocks in Java to handle different exceptions within a single try block. Discover how this structure allows for flexible error handling, enabling developers to manage various exception types in the same code section efficiently.



Java Multiple Catch Blocks

In Java, multiple catch blocks are used to handle various exceptions that may occur in a particular section of code. A try block can have multiple catch blocks to manage different exceptions.

Syntax: Multiple Catch Blocks

Syntax

try {
// Protected code
} catch (ExceptionType1 e1) {
// Handle ExceptionType1
} catch (ExceptionType2 e2) {
// Handle ExceptionType2
} catch (ExceptionType3 e3) {
// Handle ExceptionType3
}

In this example, the try block is followed by three catch blocks, but there can be any number of catch blocks. The exceptions are handled by the first catch block whose exception type matches the thrown exception. If none match, the exception propagates down the list.

Points to Remember

  • Only one exception can be handled at a time. Each catch block deals with one specific type of exception.
  • The order of the catch blocks is crucial. Specific exceptions should appear before generic ones, or the compiler will generate an error.

Example: Handling Multiple Exceptions

The following code demonstrates the use of multiple catch blocks. In this example, a division by zero causes an exception, and it is caught and handled by the second catch block.

Syntax

package com.example;

public class ExcepTest {

public static void main(String args[]) {
    try {
        int[] a = new int[2];
        int b = 0;
        int c = 1 / b; // This will cause ArithmeticException
        System.out.println("Access element: " + a[3]); // This will cause ArrayIndexOutOfBoundsException
    }
    catch (ArrayIndexOutOfBoundsException e) {
        System.out.println("ArrayIndexOutOfBoundsException: " + e);
    }
    catch (ArithmeticException e) {
        System.out.println("ArithmeticException: " + e);
    }
    catch (Exception e) {
        System.out.println("Exception: " + e);
    }
    System.out.println("Out of the block");
}
}
Output

ArithmeticException: / by zero
Out of the block

Handling Multiple Exceptions in a Single Catch Block

Since Java 7, it is possible to handle more than one exception in a single catch block. This simplifies the code significantly. Here's an example:

Syntax

catch (IOException | FileNotFoundException ex) {
ex.printStackTrace();
}

Example: Single Catch Block for Multiple Exceptions

The following code shows how you can handle multiple exceptions using a single catch block. In this case, both ArrayIndexOutOfBoundsException and ArithmeticException are caught together.

Syntax

package com.example;

public class ExcepTest {

public static void main(String args[]) {
    try {
        int[] a = new int[2];
        int b = 0;
        int c = 1 / b; // This will cause ArithmeticException
        System.out.println("Access element: " + a[3]); // This will cause ArrayIndexOutOfBoundsException
    }
    catch (ArrayIndexOutOfBoundsException | ArithmeticException e) {
        System.out.println("Exception: " + e);
    }
    System.out.println("Out of the block");
}
}
Output

Exception: java.lang.ArithmeticException: / by zero
Out of the block