You are on page 1of 8

Exception Handling:

An exception is an abnormal condition that arises in a code sequence at run time. In other words, an exception is a run-time error. A Java exception is an object that describes an exceptional (error) condition that has occurred in a piece of code. When an exceptional condition arises, an object representing that exception is created and thrown in the method that caused the error. The exception is caught and processed. Exceptions can be generated by the Java run-time system, or they can be manually generated by the code. Java exception handling is managed via five keywords: try, catch, throw, throws, and finally This is the general form of an exception-handling block: try { // block of code to monitor for errors } catch (ExceptionType1 exOb) { // exception handler for ExceptionType1 } catch (ExceptionType2 exOb) { // exception handler for ExceptionType2 } // ... finally { // block of code to be executed before try block ends } Here, ExceptionType is the type of exception that has occurred Consider this example class Example { public static void main(String args[]) { int d = 0; int a = 42 / d; } }

When the Java run-time system detects the attempt to divide by zero, it constructs a new exception object and then throws this exception. This causes the execution of the program to stop, because once an exception has been thrown, it must be caught by an exception handler Any exception that is not caught by your program will ultimately be processed by the default handler. The default handler displays a string describing the exception, prints a stack trace from the point at which the exception occurred, and terminates the program. Here is the output generated when this example is executed. java.lang.ArithmeticException: / by zero at Example.main(Example.java:4) Some important Exceptions ArithmeticException ArrayIndexOutOfBoundsException Arithmetic error, such as divide-by-zero. Array index is out-of-bounds.

try and catch


The code to be monitored will be inside a try block. Immediately following the try block, include a catch clause that specifies the exception type to be catch.Once an exception is thrown, program control transfers out of the try block into the catch block. Catching exceptions that are thrown by the Java run-time system
Eg:

class Example2 { public static void main(String args[]) { int d, a; try { // monitor a block of code. d = 0; a = 42 / d; } catch (ArithmeticException e) { // catch divide-by-zero error System.out.println("Division by zero."); } } } Here in this program 42 is dividing by 0 which leads to divide by zero error(exception).It creates an exception object and throws the exception. It is caught by the exception handler inside

the catch block and prints the msg Division by zero .If this error is not handled properly the pgm will terminates. Multiple catch Clauses More than one exception could be raised by a single piece of code. This type of situation, can be handled by two or more catch clauses, each catching a different type of exception. When an exception is thrown, each catch statement is inspected in order, and the first one whose type matches that of the exception is executed. After one catch statement executes, the others are bypassed, and execution continues after the try/catch block. class MultipleCatch { public static void main(String args[]) { try { int a =args.length; int b = 42 / a; //dividing 42 by zero int c[] = { 1 }; c[42] = 99;

//

} catch(ArithmeticException e) { System.out.println("Divide by 0: " + e); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("Array index oob: " + e); } System.out.println("After try/catch blocks."); } } Output C:\j2sdk1.4.2_04\bin>javac MultipleCatch.java C:\j2sdk1.4.2_04\bin>java MultipleCatch // no arguments so a.length will be 0 Divide by 0: java.lang.ArithmeticException: / by zero After try/catch blocks. C:\j2sdk1.4.2_04\bin>java MultipleCatch 789 // here there is argument so a.length will be 3

Array index oob: java.lang.ArrayIndexOutOfBoundsException: 42 After try/catch blocks. Here in this program 42 is dividing by a which leads to divide by zero error(exception ) if the value of a is zero.It will cause ArithmeticException. Also the int array c has a length of 1, yet the program attempts to assign a value to c[42]. It will cause an ArrayIndexOutOfBoundsException Nested Try Statements // An example of nested try statements. class NestedTry { public static void main(String args[]) { try { int a = args.length; int b = 42 / a; /* If no command-line args are present, the following statement will generate a divide-by-zero exception. */

System.out.println("a = " + a); try { // nested try block if(a==1) /* If one command-line arg is used,then a divide-by-zero { exception will be generated by the following code. */ a = a/(a-a); // division by zero } if(a==2) /* If two command-line args are used, { then generate an out-of-bounds exception. */ int c[] = { 1 }; c[42] = 99; // generate an out-of-bounds exception } } catch(ArrayIndexOutOfBoundsException e) { System.out.println("Array index out-of-bounds: " + e); } } catch(ArithmeticException e) { System.out.println("Divide by 0: " + e);

} } } Output: C:\j2sdk1.4.2_04\bin>javac NestedTry.java C:\j2sdk1.4.2_04\bin>java NestedTry Divide by 0: java.lang.ArithmeticException: / by zero C:\j2sdk1.4.2_04\bin>java NestedTry 2 a=1 Divide by 0: java.lang.ArithmeticException: / by zero C:\j2sdk1.4.2_04\bin>java NestedTry 2 5 a=2 Array index out-of-bounds: java.lang.ArrayIndexOutOfBoundsException: 42 C:\j2sdk1.4.2_04\bin>java NestedTry 2 5 5 a=3

throw
try catch is used for catching exceptions that are thrown by the Java run-time system .To throw an exception explicitly, the throw statement is used. The general form of throw is shown here: throw ThrowableInstance; ThrowableInstance is an object of class Throwable or subclass of Throwable. class ThrowDemo { public static void main(String args[]) { try { int a=args.length; if(a==0) throw new ArithmeticException("Arithmetic Exception"); } catch(ArithmeticException e) { System.out.println("Exception caught"+e); } } } output javac ThrowDemo.java java ThrowDemo

Exception caughtjava.lang.ArithmeticException: Arithmetic Exception For more information public class ThrowDemo { static void divide(int a) { try { if(a==0) throw new ArithmeticException(); } catch(ArithmeticException e) { System.out.println("Caught"+e); throw e; } } public static void main(String args[]) { int a=args.length; try { divide(a); } catch(ArithmeticException e) { System.out.println("Recaught"+e); } } } Javac ThrowDemo.java Java ThrowDemo Caughtjava.lang.ArithmeticException Recaughtjava.lang.ArithmeticException This program gets two chances to deal with the same error. First main() sets up an exception context and then calls divide(). The divide() method sets up another exception-handling context and immediately throws a new instance of ArithmeticException, which is caught on the next line. The exception is then rethrown.

throws This is the general form of a method declaration that includes a throws clause: type method-name(parameter-list)throws exception-list { //body of method } Here exception-list is a comma-separated list of the exceptions that a method can throw. Example:

public class ThrowsDemo { public static void main(String args[])throws ArithmeticException, ArrayIndexOutOfBoundsException { try { int a=args.length; int x=10/a; System.out.println("Value of x is "+x); } catch(ArithmeticException e) { System.out.println("Caught"+e); } } } javac ThrowDemo.java java ThrowDemo Caughtjava.lang.ArithmeticException: / by zero

finally
finally creates a block of code that will be executed after a try/catch block has completed. The finally block will execute whether or not an exception is thrown. If an exception is thrown, the finally block will execute even if no catch statement matches the exception. Any time a method is about to return to the caller from inside a try/catch block, via an uncaught exception or an explicit return statement, the finally clause is also executed just before the method return. This can be useful for closing file handles and freeing up any other resources that might have been allocated at the beginning of a method. The finally clause is optional. However, each try statement requires at least one catch or a finally clause. Example 1 public class DemoFinal { public static void main(String args[]) { try { int a=args.length; int x=42/a; } catch(ArithmeticException e) { System.out.println(e); } finally { System.out.println("Finally block executed"); } } } javac DemoFinal.java java DemoFinal java.lang.ArithmeticException: / by zero Finally block executed

Example 2 public class DemoFinal { static void calculate( int a) { try { int x=42/a; } catch(ArithmeticException e) { System.out.println("Exception caught inside method"); } } public static void main(String args[]) { int a=args.length; try { calculate(a); } catch(ArithmeticException e) { System.out.println("Exception caught inside main"); } finally { System.out.println("Finally block executed"); } } } javac DemoFinal.java java DemoFinal Exception caught inside method Finally block executed

You might also like