Professional Documents
Culture Documents
Exception Handling: CS212: Object-Oriented Programming
Exception Handling: CS212: Object-Oriented Programming
Exception Handling: CS212: Object-Oriented Programming
HANDLING
CS212: Object-Oriented Programming
RECAP
To get an overview of exceptions and exception handling
To explore the advantages of using exception handling
To distinguish exception types: Error (fatal) vs. Exception (nonfatal) and checked vs.
unchecked
To write a try-catch block to handle exceptions
OBJECTIVES
Self-Review Exercise Discussion
To declare exceptions in a method header
To throw exceptions in a method
To explain how an exception is propagated.
SELF – REVIEW EXERCISE:
String[] s = {"abc", "123", null, "xyz"};
9
RETHROWING EXCEPTIONS
Exceptions are rethrown when a catch block decides either that it
cannot process the exception or that it can only partially process it.
10
1
2 // Demonstration of the try...catch...finally exception handling
3 // mechanism.
4
5 public class UsingExceptions
6 {
7 public static void main( String args[] )
8 {
9 try Call method that throws an exception
10 {
11 throwException(); // call method throwException
12 } // end try
13 catch ( Exception exception ) // exception thrown by throwException
14 {
15 System.err.println( "Exception handled in main" );
16 } // end catch
17
18 doesNotThrowException();
19 } // end main
11
20
21 // demonstrate try...catch...finally
22 public static void throwException() throws Exception
23 {
24 try // throw an exception and immediately catch it
25 {
26 System.out.println( "Method throwException" );
27 throw new Exception(); // generate exception
28 } // end try
29 catch ( Exception exception ) // catch exception thrown in try
30 {
31 System.err.println(
Create new Exception and throw it
32 "Exception handled in method throwException" );
33 throw exception; // rethrow for further processing
34
35 // any code here would not be reached
Throw previously created Exception
36
37 } // end catch
38 finally // executes regardless of what occurs in try...catch
12
39 {
40 System.err.println( "Finally executed in throwException" );
41 } // end finally
finally block executes even though
42 exception is rethrown in catch block
43 // any code here would not be reached, exception rethrown in catch
44
45 } // end method throwException
46
47 // demonstrate finally when no exception occurs
48 public static void doesNotThrowException()
49 {
50 try // try block does not throw an exception
51 {
52 System.out.println( "Method doesNotThrowException" );
53 } // end try
54 catch ( Exception exception ) // does not execute
55 {
56 System.err.println( exception );
57 } // end catch
58 finally // executes regardless of what occurs in try...catch
59 {
60 System.err.println(
61
finally block executes even
"Finally executed in doesNotThrowException" );
62 } // end finally though no exception is thrown
63
64 System.out.println( "End of method doesNotThrowException" );
65 } // end method doesNotThrowException
13
Method throwException
Exception handled in method throwException
Finally executed in throwException
Exception handled in main
Method doesNotThrowException
Finally executed in doesNotThrowException
End of method doesNotThrowException
COMMON PROGRAMMING ERRORS
14
STACK
LIFO
• Last In First Out
STACK UNWINDING
main method { method1 { method2 { An exception
... ... ... is thrown in
try { try { try { method3
... ... ...
invoke method1; invoke method2; invoke method3;
statement1; statement3; statement5;
} } }
catch (Exception1 ex1) { catch (Exception2 ex2) { catch (Exception3 ex3) {
Process ex1; Process ex2; Process ex3;
} } }
statement2; statement4; statement6;
} } }
Call Stack
method3
method2 method2
17
STACK UNWINDING
1 // Fig. 13.6: UsingExceptions.java
2 // Demonstration of stack unwinding.
3
4 public class UsingExceptions
5 {
6 public static void main( String args[] )
7 {
8 try // call throwException to demonstrate stack unwinding
9 { Call method that throws an exception
10 throwException();
11 } // end try
12 catch ( Exception exception ) // exception thrown in throwException
13 {
14 System.err.println( "Exception handled in main" );
15 } // end catch
16 } // end main
19
17
Catch exception that may occur in the
above try block, including the call
to method throwException
18 // throwException throws exception that is not caught in this method
19 public static void throwException() throws Exception
20 {
21 try // throw an exception and catch it in main Method throws exception
22 {
23 System.out.println( "Method throwException" );
24 throw new Exception(); // generate exception
25 } // end try
26 Throw new exception; Exception not
catch ( RuntimeException runtimeException ) // catch incorrect type
27 {
caught in current try block, so
28 System.err.println(
29 "Exception handled in method throwException" );
handled in outer try block
30 } // end catch
31 finally // finally block always executes finally block executes before
32 { control returns to outer try block
33 System.err.println( "Finally is always executed" );
34 } // end finally
35 } // end method throwException
36 } // end class UsingExceptions
Method throwException
Finally is always executed
Exception handled in main
QUESTIONS?