Java 7 provides the facility to catch multiple type exceptions in a single catch block to optimize code. We can use vertical bar or pipe (|) to separate multiple exceptions in catch block.
Multiple exceptions handling before Java 7
package com.w3spoint;
public class MultipleExceptionHandling {
public static void main(String args[]){
try{
int array[] = new int[5];
array[5] = 20/0;
}
catch(ArithmeticException e){
System.out.println("ArithmeticException catch block");
System.out.println(e.getMessage());
}
catch(ArrayIndexOutOfBoundsException e){
System.out.println("ArrayIndexOutOfBoundsException catch block");
System.out.println(e.getMessage());
}
catch(Exception e){
System.out.println("Exception catch block");
System.out.println(e.getMessage());
}
}
} |
package com.w3spoint; public class MultipleExceptionHandling {
public static void main(String args[]){
try{
int array[] = new int[5];
array[5] = 20/0;
}
catch(ArithmeticException e){
System.out.println("ArithmeticException catch block");
System.out.println(e.getMessage());
}
catch(ArrayIndexOutOfBoundsException e){
System.out.println("ArrayIndexOutOfBoundsException catch block");
System.out.println(e.getMessage());
}
catch(Exception e){
System.out.println("Exception catch block");
System.out.println(e.getMessage());
}
}
}
Output
ArithmeticException catch block
/ by zero |
ArithmeticException catch block
/ by zero
Multiple exceptions handling after Java 7
package com.w3spoint;
public class MultipleExceptionHandling {
public static void main(String args[]){
try{
int array[] = new int[5];
array[5] = 20/0;
}
catch(ArithmeticException | ArrayIndexOutOfBoundsException e){
System.out.println(e.getMessage());
}
}
} |
package com.w3spoint; public class MultipleExceptionHandling {
public static void main(String args[]){
try{
int array[] = new int[5];
array[5] = 20/0;
}
catch(ArithmeticException | ArrayIndexOutOfBoundsException e){
System.out.println(e.getMessage());
}
}
}
Output
Note: In case of catching multiple exceptions, if we are using super class, don’t use child class.
package com.w3spoint;
public class MultipleExceptionHandling {
public static void main(String args[]){
try{
int array[] = new int[5];
array[5] = 20/0;
}
catch(Exception | ArithmeticException | ArrayIndexOutOfBoundsException e){
System.out.println(e.getMessage());
}
}
} |
package com.w3spoint; public class MultipleExceptionHandling {
public static void main(String args[]){
try{
int array[] = new int[5];
array[5] = 20/0;
}
catch(Exception | ArithmeticException | ArrayIndexOutOfBoundsException e){
System.out.println(e.getMessage());
}
}
}
Output
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The exception ArithmeticException is already caught by the alternative Exception
The exception ArrayIndexOutOfBoundsException is already caught by the alternative Exception
at com.w3spoint.MultipleExceptionHandling.main(MultipleExceptionHandling.java:9) |
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The exception ArithmeticException is already caught by the alternative Exception
The exception ArrayIndexOutOfBoundsException is already caught by the alternative Exception at com.w3spoint.MultipleExceptionHandling.main(MultipleExceptionHandling.java:9)