Handling Multiple Catch Clauses

So far we have seen how to use a single catch block, now we will see how to use more than one catch blocks in a single try block.

Handling Multiple Catch Clauses

So far we have seen how to use a single catch block, now we will see how to use more than one catch blocks in a single try block.

Handling Multiple Catch Clauses

Handling Multiple Catch Clauses

     

So far we have seen how to use a single catch block, now we will see how to use more than one catch blocks in a single try block.In java when we handle the exceptions then we can have multiple catch blocks for a particular try block to handle many different kind of exceptions that may be generated while running the program i.e. you can use more than one catch clause in a single try block however every catch block can handle only one type of exception. this mechanism is necessary when the try block has statement that raise  different type of exceptions.

The syntax for using this clause is given below:-

try{
???
???
}
catch(<exceptionclass_1> <obj1>){
//statements to handle the exception  
}

catch(<exceptionclass_2> <obj2>){
//statements to handle the exception  
}
catch(<exceptionclass_N> <objN>){
//statements to handle the exception  
}

 

When an exception is thrown, normal execution is suspended. The runtime system proceeds to find a matching catch block that can handle the exception. If no handler is found, then the exception is dealt with by the default exception handler at the top level.

 

Lets see an example given below which shows the implementation of multiple catch blocks for a single try block.

 

public class Multi_Catch
{
   public static void main (String args[])
   {
  int array[]={20,10,30};
  int num1=15,num2=0;
  int res=0;

  try
  {
   res = num1/num2;
  System.out.println("The result is" +res);

  for(int ct =2;ct >=0; ct--)
  {
   System.out.println("The value of array are" +array[ct]);
   }

  }

  catch (ArrayIndexOutOfBoundsException e)
   {
   System.out.println("Error?. Array is out of Bounds");
  }

   catch (ArithmeticException e) 
   { 
   System.out.println ("Can't be divided by Zero"); 
   }

  }
  }

 

 

Output of the program:

 
C:\Roseindia\>javac Multi_Catch.java

C:\Roseindia\>java Multi_Catch

Can't be divided by Zero

In this example we have used two catch clause catching the exception ArrayIndexOutOfBoundsException and ArithmeticException in which the statements that may raise exception are kept under the try block. When the program is executed, an exception will be raised. Now that time  the first catch block is skipped and the second catch block handles the error.

Download this program

Lets have an another output, in which the second catch block is skipped and the first catch block handles the error.

public class Multi_Catch1
{
   public static void main (String args[])
   {
  int array[]=new int [5];
  int num1=15,num2=2;
  int res=0;

  try
  {
   res = num1/num2;
  System.out.println("The result is" +res);

  for(int ct =0;ct <=5; ct++)
  {
   array[ct] = ct * ct ;
   }

  }

  catch (ArrayIndexOutOfBoundsException e)
   {
   System.out.println("Assigning the array beyond the upper bound");
  }

   catch (ArithmeticException e) 
   { 
   System.out.println ("Can't be divided by Zero"); 
   }

  }
  }

 

 

Output of the program:

 
C:\Roseindia\>javac Multi_Catch.java

C:\Roseindia\>java Multi_Catch

Assigning the array beyond the upper bound

Download this example

Handling the Unreachable Code Problem 

The multiple catch blocks can generate unreachable code error i.e. if the first catch block contains the Exception class object then the subsequent catch blocks are never executed.  This is known as Unreachable code problem. To avoid this, the last catch block in multiple catch blocks must contain the generic class object that is called the Exception class. This exception class being the super class of all the exception classes and is capable of  catching any  types of exception. The generic Exception class can also be used with multiple catch blocks.

Take a look at the following example:

public class Generic_Excep
{
   public static void main (String args[])
  { 
   String str = "Exception" ;
   int len=0;
   try
  {
   StringBuffer sbuf = new StringBuffer(str);
  len = str.length() ;
   for(int ct=len;ct>=0;ct--)
  {
  System.out.print(sbuf.charAt(ct));
   }
   }
   catch(Exception e)
  {
  System.out.println("Error...."+e);
   }
   }
   }

 

Output of the program:

C:\Roseindia\>javac Generic_Excep.java

C:\Roseindia\>java Generic_Excep

Error....java.lang.StringIndexOutOfBoundsException: String index out of range: 9

In this example we didn't specify that which one exception may occur during the execution of program but here we are trying to access the value of an array that is out of bound still we don't need to worry about handle the exception because we have used the Exception class that is responsible to handle any type of exception.

Download this example