An Object-Oriented Approach to Programming Logic and Design Fourth Edition
Chapter 10
Exception Handling
Objectives
In this chapter, you will learn about:
Exceptions
The limitations of traditional error handling
Trying code and catching exceptions
Throwing and catching multiple exceptions
Using the finally block
The advantages of exception handling
Tracing exceptions through the call stack
Creating your own exceptions
2
An Object-Oriented Approach to Programming Logic and Design
Learning about Exceptions
Exception
Unexpected or error condition
Occurs while program is running
Unusual occurrence
Examples
Reading a nonexistent file
Writing data to a full disk
Entering invalid input data
Dividing a value by zero
Accessing an array using too-large subscript
Calculating a value that exceeds the variable type’s limit
3
An Object-Oriented Approach to Programming Logic and Design
Learning about Exceptions (cont’d)
Exception handling
Object-oriented techniques used to manage errors
Group of methods
Handles predictable errors
Unpredictable errors
Program cannot recover
Exception handling not used
Example: power failure
4
An Object-Oriented Approach to Programming Logic and Design
5
An Object-Oriented Approach to Programming Logic and Design
Figure 10-1 illustrates a method that might divide by 0
Figure 10-2 demonstrates an exception message generated in Java when the program attempts to divide by 0
Figure 10-1
Figure 10-2
Learning about Exceptions (cont’d)
Throwing an exception
When method detects an exception
Failure to handle exception
Program terminates: abrupt and unforgiving
Example in Figure 10-2 on previous slide
Two approaches to handling exceptions
Traditional manner
Object-oriented manner provides more elegant (and safer) solutions
6
An Object-Oriented Approach to Programming Logic and Design
Learning about Exceptions (cont’d)
Examples of typical exceptions
Attempt to divide by zero
ArithmeticException or DivideByZeroException
Attempt to store object of wrong data type in an array
ArrayTypeMismatchException
Attempt to access array with invalid subscript
IndexOutOfRangeException
Object reference does not correctly refer to created object
NullReferenceException
Arithmetic operation produces a greater value than assigned memory location can accommodate
OverflowException
7
An Object-Oriented Approach to Programming Logic and Design
Understanding the Limitations of Traditional Error Handling
Error conditions existed before object-oriented methods
Most common error-handling solution
Make a decision before using a potentially error-causing value
Example: Figure 10-3 displays error message if divisor is zero
8
An Object-Oriented Approach to Programming Logic and Design
Figure 10-3
Understanding the Limitations of Traditional Error Handling (cont’d)
Alternative solutions and issues
Prompt user for new value
Not useful if application retrieves file input
Force divisor to one
Not useful if produces wrong answer
Drawbacks to traditional error-handling approaches
Client using traditional error-handling method must accept method’s error-handling solution
Inflexible
May require multiple method versions
9
An Object-Oriented Approach to Programming Logic and Design
Understanding the Limitations of Traditional Error Handling (cont’d)
Exception handling
More elegant solution for error-handling conditions
Method detects errors, but client handles them
Terminology
“Try” code: tests a procedure that might cause an error
“Throws an exception”: the code that detects an error sends an exception object to another method or to the operating system
“Catches the exception”: a block of code receives the error and takes appropriate action
10
An Object-Oriented Approach to Programming Logic and Design
Trying Code and Catching Exceptions
try block
Block of code you attempt to execute
Can contain any number of statements or method calls
If exception occurs, the remaining statements in try block do not execute
catch block
Code segment handling exception thrown by try block
Need at least one following a try block
11
An Object-Oriented Approach to Programming Logic and Design
Trying Code and Catching Exceptions (cont’d)
throw statement
Sends an exception object out of method to be handled elsewhere
catch block
Consists of keyword catch, followed by parentheses that contain exception type and identifier
Statements that take action to handle error
An endcatch statement (pseudocode)
Can handle one exception type only
Does not execute if no exception occurs
12
An Object-Oriented Approach to Programming Logic and Design
13
An Object-Oriented Approach to Programming Logic and Design
General format of a method that includes a shaded try…catch pair
Figure 10-4
Trying Code and Catching Exceptions (cont’d)
Statements after catch block
Execute normally whether or not there is an exception
14
An Object-Oriented Approach to Programming Logic and Design
Method with a try block that attempts division
Figure 10-5
Trying Code and Catching Exceptions (cont’d)
Figure 10-5 (previous slide)
throw operation occurred implicitly
Programmer did not have to write a throw statement
throw and catch operations reside in same method
Similar to if...else pair that handles error
throw and catch blocks may reside in separate methods
Variable mistake in catch block
Object of type Exception (not used)
Exception class may contain a method called getMessage() that returns information about the cause of the error
15
An Object-Oriented Approach to Programming Logic and Design
Throwing and Catching Multiple Exceptions
try block can contain as many statements as needed
First error-generating statement throws an exception
Logic transfers to catch block
Remaining try block statements unexecuted
Can catch as many exceptions as desired
Examined sequentially until match found
Matching catch block executes
Remaining catch blocks bypassed
16
An Object-Oriented Approach to Programming Logic and Design
Figure 10-6
17
An Object-Oriented Approach to Programming Logic and Design
Program throws two types of exceptions: ArithmeticExceptions and IndexOutOfBoundsExceptions
18
An Object-Oriented Approach to Programming Logic and Design
Each of the two catch blocks displays a different message
Figure 10-7
19
An Object-Oriented Approach to Programming Logic and Design
Uses a single generic catch block to catch any type of exception
Figure 10-8
Throwing and Catching Multiple Exceptions (cont’d)
Unreachable code
Statements never execute under any circumstance
Also known as dead code
To avoid unreachable code, order catch blocks correctly
More specific exception types first
More general types follow to catch remaining errors
20
An Object-Oriented Approach to Programming Logic and Design
21
An Object-Oriented Approach to Programming Logic and Design
Class that contains an unreachable catch block
Figure 10-9
Using the finally Block
Used when specific actions are needed at the end of a try…catch sequence
Always executes whether or not exception occurred
22
An Object-Oriented Approach to Programming Logic and Design
try…catch sequence that uses a finally block
Figure 10-10
Compare Figure 10-4 with Figure 10-10
23
An Object-Oriented Approach to Programming Logic and Design
Figure 10-4
Using the finally Block (cont’d)
Comparison of Figures 10-10 and 10-4
When Figure 10-4 try code works without error
Control passes to statements at end of method
When try code fails and throws an exception
Exception is caught
catch block executes
Control passes to statements at end of method
Figure 10-4 statements at end may not execute
Unplanned (uncaught) exception occurs
Statements in try or catch block cause program termination
24
An Object-Oriented Approach to Programming Logic and Design
Using the finally Block (cont’d)
Unhandled exception
Program execution stops immediately
Exception sent to operating system
Current method abandoned
Including a finally block
Assures finally statements will execute
Before method abandoned
Even if method concludes prematurely
Often used to close data files
25
An Object-Oriented Approach to Programming Logic and Design
Using the finally Block (cont’d)
26
An Object-Oriented Approach to Programming Logic and Design
Pseudocode tries reading a file and handles an exception
finally block closes the file
Figure 10-11
Using the finally Block (cont’d)
Code in finally block executes for each of the following outcomes of the try block
try ends normally with no exceptions
try throws FileException to the catch block, which executes and ends program
Another exception causes try block to be abandoned prematurely and catch block does not execute
27
An Object-Oriented Approach to Programming Logic and Design
Understanding the Advantages of Exception Handling (cont’d)
Confusing
Error-prone
Figure 10-12: pseudocode representing traditional error checking
28
An Object-Oriented Approach to Programming Logic and Design
Handling potential program errors before advent of object-oriented languages
Figure 10-12
Understanding the Advantages of Exception Handling (cont’d)
Handling potential program errors with object-oriented techniques
29
An Object-Oriented Approach to Programming Logic and Design
Code is:
Simpler
Easier to read
More flexible
Reusable
Figure 10-13: illustrates object-oriented approach
Figure 10-13
Understanding the Advantages of Exception Handling (cont’d)
Figure 10-14: Potential error in displayPrice() method: accepts argument as array subscript
Subscript could be out of bounds
Method might throw an exception
30
An Object-Oriented Approach to Programming Logic and Design
Figure 10-14
Understanding the Advantages of Exception Handling (cont’d)
Figures 10-15 and 10-16 show two ways to handle Figure 10-14 error exception
An Object-Oriented Approach to Programming Logic and Design
31
Exception displays a price of $0
Figure 10-15
Figure 10-16
Understanding the Advantages of Exception Handling (cont’d)
An Object-Oriented Approach to Programming Logic and Design
32
Exception includes an input dialog box to prompt user for a new item number until it is within range
Tracing Exceptions through the Call Stack
When one method calls another
Operating system keeps track of calling method
Program control returns to calling method once method completes
Call stack
Memory location
Computer stores list of method memory locations
Where system must return after call completed
33
An Object-Oriented Approach to Programming Logic and Design
Tracing Exceptions through the Call Stack (cont’d)
34
An Object-Oriented Approach to Programming Logic and Design
When method throws an exception
If same method does not catch it, exception thrown to next method up the call stack
Demonstrates how call stack works
Figure 10-17
Tracing Exceptions through the Call Stack (cont’d)
If no method in chain handles the exception
Given to operating system
Passing exceptions through chain of calling methods
Advantages
Can handle exceptions wherever most appropriate (includes operating system)
Can use printStackTrace(): debugging tool that displays a list of methods in the call stack to determine location of exception
Disadvantages
Difficulty locating original source of the exception (if program uses several classes)
35
An Object-Oriented Approach to Programming Logic and Design
A Case Study: Tracing the Source of an Exception
See flaw (shaded) in Figure 10-18
Subscript set to 2 instead of 1 for higher tax rate
Out of bounds error occurs if subscript used with taxRate array
36
An Object-Oriented Approach to Programming Logic and Design
Figure 10-18
A Case Study: Tracing the Source of an Exception (cont’d)
Assume Tax class is a purchased class (black box)
Figure 10-19 shows a sample Prices class
37
An Object-Oriented Approach to Programming Logic and Design
Figure 10-19
A Case Study: Tracing the Source of an Exception (cont’d)
Figure 10-20: New application (next slide)
Asks user to enter item number
Passes item to Prices.displayPrice()
Tries item entry and catches exception
Executing program using valid item number
Receive “Error!” message from catch block
To discover what caused the message, replace catch block statement with mistake.printStackTrace()
38
An Object-Oriented Approach to Programming Logic and Design
A Case Study: Tracing the Source of an Exception (cont’d)
39
An Object-Oriented Approach to Programming Logic and Design
Prompts user for an item number and passes it to Prices.displayPrice()
Figure 10-20
A Case Study: Tracing the Source of an Exception (cont’d)
40
An Object-Oriented Approach to Programming Logic and Design
Figure 10-21 shows output from C# execution
Figure 10-21
Creating Your Own Exceptions
Object-oriented languages provide built-in Exception types
Cannot predict every possible condition
Programmer may create application-specific exceptions
Usually extend a built-in Exception class
41
An Object-Oriented Approach to Programming Logic and Design
Creating Your Own Exceptions (cont’d)
42
An Object-Oriented Approach to Programming Logic and Design
Pseudocode in Figure 10-22
Creates HighBalanceException
Assumes that the parent class contains a setMessage() method
Constructor contains a single statement to set error message
Figure 10-22
Figure 10-23
Creating Your Own Exceptions (cont’d)
43
An Object-Oriented Approach to Programming Logic and Design
CustomerAccount class using HighBalanceException
If account balance exceeds limit, an instance of the class is created and thrown
Figure 10-24
Creating Your Own Exceptions (cont’d)
44
An Object-Oriented Approach to Programming Logic and Design
Application constructs a CustomerAccount object within a try block
Creating Your Own Exceptions (cont’d)
Do not create excessive number of special Exception types
Add complexity for other programmers
Advantages of specialized Exception classes
Provides elegant handling of error situations
Separates error code from normal code
Passes errors up the stack and traces them
Client classes handle exceptions in manner most suitable for the application
45
An Object-Oriented Approach to Programming Logic and Design
Summary
Exception:
Unexpected or error condition
Exception handling
Techniques used to manage actions following an exception
try block
Wraps code that might cause an exception
catch block
Set of code statements to handle specific error types
Multiple catch blocks
Handle different error types
46
An Object-Oriented Approach to Programming Logic and Design
Summary (cont’d)
finally block
Statements always executed after try block
Used to perform cleanup tasks
Object-oriented exception-handling techniques
Provide flexibility in handling exceptions
Call stack
Memory location storing method locations list
Built-in exceptions
Cannot predict every condition
Can write your own exceptions
47
An Object-Oriented Approach to Programming Logic and Design