Exceptions

advertisement
Exceptions
cs1043
Program Exceptions
• When a program detects an error, what
should it do?
– Nothing, simply allow the program to fail.
– Implement a course of action to correct the error.
Example:
• A user enters an incorrect URL into a web
browser.
– Should the browser crash?
– Should the browser request another URL?
Exception Handling
• Software is designed to detect and correct
most failures.
• Detection and correction of an error is known
as exception handling.
Java Exceptions
• The Java compiler places exceptions into two
categories:
– Checked exceptions
– Unchecked exceptions
Checked Exceptions
• The compiler requires the programmer to
either:
1. write a competent exception handler (CEH) for
any checked exceptions.
- Example: Input-output operations (reading and writing
files and data streams).
2. Throw the exception hoping another method in
the calling-tree will be able to handle the
exception. This require the throws keyword.
Unchecked Exceptions
– Example
double z = x / y;
The compiler does not require any special action to
prevent the division when y=0.
Unchecked Exceptions
• The programmer can choose to:
1. Ignore the exception and hope for the best.
2. Catch the exception and implement an action to
recover from the exception.
Note: if the program cannot recover from an
exception, the program exits with a fatal
exception runtime error.
Unchecked Exception Example
// Assume x and y are declared and
// assigned.
double z;
if ( y != 0 ) //prevent 0-division
z = x / y;
else
… // perform some other action
Checked Exception
• Two choices for the programmer:
1. Throw the exception to the referencing method
and hope for recovery.
2. Catch the exception with a competent exception
handler
Java Keywords for Exception Handling
• An unchecked exception could use the
keyword “throw”.
• Checked exceptions can use any of these:
– throws
– throw
– try, catch, & finally
The Competent Exception Handler
• The competent exception handler uses a
combination of these three keywords: try,
catch, and finally.
• If the programmer wishes to send the
exception to the referencing method, then use
the throws keyword.
Syntax for CEH
• In order:
1. try-block – one per CEH
2. catch-blocks - zero or more per CEH
3. finally-block – zero or one per CEH
1. CEH try-Block
• A CEH must have a try-block
• The try-block consists of the try keyword
followed by a body of code.
2. CEH catch-Blocks
• The try-block is followed by zero or more
catch blocks.
– Each catch block will perform an action based on
the exception type
3. CEH finally-Block
• The finally-block is required if there are zero
catch blocks.
• The finally-block is optional if there is at least
one catch-block.
CEH
• The CEH can be nested just like other control
structures.
Unchecked Exception with “CEH”
public void withdraw( double amount )
{
try // Competent Exception Handler
{
if ( amount > balance_ ) { // overdraft!
if ( OVERDRAFT_PENALTY > balance_ )
balance_ = 0.0;
else
balance_ -= OVERDRAFT_PENALTY;
throw new OverdraftException(
"Withdrawal exceeds balance" );
} else {
balance_ -= amount;
}
}
} catch( OverdraftException e ) {
System.out.println( e );
}
// end withdraw method
User Defined Exception Class
// Customized User (Programmer)
// Designed Exception Class:
public class OverdraftException
extends RuntimeException
{
public OverdraftException( String reason )
{ super ( reason ) ; }
}
Download