Transcript ch12

Chapter 12: Handling Exceptions
and Events
Java Programming:
From Problem Analysis to Program Design,
Second Edition
Objectives
 Learn what an exception is.
 See how a try/catch block is used to handle
exceptions.
 Become aware of the hierarchy of exception
classes.
 Learn about checked and unchecked exceptions.
 Learn how to handle exceptions within a program.
 Discover how to throw and rethrow an exception.
 Learn how to handle events in a program.
Java Programming: From Problem Analysis to Program Design, Second Edition
2
Exception
 An occurrence of an undesirable situation that can
be detected during program execution.
 Examples:
 Division by zero.
 Trying to open an input file that does not exist.
 An array index that goes out of bounds.
Java Programming: From Problem Analysis to Program Design, Second Edition
3
Handling Exceptions within a Program
 Can use an if statement to handle an exception.
 However, suppose that division by zero occurs in
more than one place within the same block.
 In this case, using if statements may not be the
most effective way to handle the exception.
Java Programming: From Problem Analysis to Program Design, Second Edition
4
Java’s Mechanism of
Exception Handling
 When an exception occurs, an object of a particular
exception class is created.
 Java provides a number of exception classes to
effectively handle certain common exceptions, such
as:
 Division by zero
 Invalid input
 File not found
Java Programming: From Problem Analysis to Program Design, Second Edition
5
Java’s Mechanism of
Exception Handling
 Division by zero is:
 An arithmetic error.
 Handled by the class ArithmeticException.
 When a division by zero exception occurs, the
program creates an object of the class
ArithmeticException.
Java Programming: From Problem Analysis to Program Design, Second Edition
6
Java’s Mechanism of
Exception Handling
 When a Scanner object is used to input data into a
program, any invalid input errors are handled using
the class InputMismatchException.
 The class Exception (directly or indirectly) is
the superclass of all the exception classes in Java.
Java Programming: From Problem Analysis to Program Design, Second Edition
7
try/catch/finally Block
 Statements that might generate an exception are
placed in a try block.
 The try block:
 Might also contain statements that should not be
executed if an exception occurs.
 Is followed by zero or more catch blocks.
 A catch block:
 Specifies the type of exception it can catch.
 Contains an exception handler.
Java Programming: From Problem Analysis to Program Design, Second Edition
8
try/catch/finally Block
 The last catch block may or may not be followed
by a finally block.
 Any code contained in a finally block always
executes regardless of whether an exception occurs,
except when the program exits early from a try
block by calling the method System.exit.
 If a try block has no catch block, then it must
have the finally block.
Java Programming: From Problem Analysis to Program Design, Second Edition
9
try/catch/finally Block
Java Programming: From Problem Analysis to Program Design, Second Edition
10
try/catch/finally Block
 If no exception is thrown in a try block, all
catch blocks associated with the try block are
ignored and program execution resumes after the
last catch block.
 If an exception is thrown in a try block, the
remaining statements in the try block are ignored.
 The program searches the catch blocks in the
order in which they appear after the try block and
looks for an appropriate exception handler.
Java Programming: From Problem Analysis to Program Design, Second Edition
11
try/catch/finally Block
 If the type of the thrown exception matches the
parameter type in one of the catch blocks, the
code of that catch block executes and the
remaining catch blocks are ignored.
 If there is a finally block after the last catch
block, the finally block executes regardless of
whether an exception occurs.
Java Programming: From Problem Analysis to Program Design, Second Edition
12
Order of catch Blocks
 The heading of a catch block specifies the type of
exception it handles.
 A catch block can catch either all exceptions of a
specific type or all types of exceptions.
 A reference variable of a superclass type can point to
an object of its subclass.
Java Programming: From Problem Analysis to Program Design, Second Edition
13
Order of catch Blocks
 If you declare an exception using the class
Exception in the heading of a catch block, then
that catch block can catch all types of exceptions
because the class Exception is the superclass
of all exception classes.
 In a sequence of catch blocks following a try
block, a catch block that declares an exception of a
subclass type should be placed before catch blocks
that declare exceptions of a superclass type.
Java Programming: From Problem Analysis to Program Design, Second Edition
14
Order of catch Blocks
Java Programming: From Problem Analysis to Program Design, Second Edition
15
Order of catch Blocks
Java Programming: From Problem Analysis to Program Design, Second Edition
16
Order of catch Blocks
Java Programming: From Problem Analysis to Program Design, Second Edition
17
Order of catch Blocks
Java Programming: From Problem Analysis to Program Design, Second Edition
18
Order of catch Blocks
Java Programming: From Problem Analysis to Program Design, Second Edition
19
Java’s Exception Class
 class Exception:
 Subclass of class Throwable.
 Superclass of classes designed to handle exceptions.
 Various types of exceptions:




I/O exceptions.
Number format exceptions.
File not found exceptions.
Array index out of bounds exceptions.
 Various exceptions categorized into separate classes
and contained in various packages.
Java Programming: From Problem Analysis to Program Design, Second Edition
20
Java’s Exception Class
Java Programming: From Problem Analysis to Program Design, Second Edition
21
Java’s Exception Class
Java Programming: From Problem Analysis to Program Design, Second Edition
22
Java’s Exception Class
Java Programming: From Problem Analysis to Program Design, Second Edition
23
Java’s Exception Class
Java Programming: From Problem Analysis to Program Design, Second Edition
24
Java’s Exception Class
Java Programming: From Problem Analysis to Program Design, Second Edition
25
Java’s Exception Class
Java Programming: From Problem Analysis to Program Design, Second Edition
26
Checked Exceptions
 Any exception that can be analyzed by the
compiler.
 Example:
 FileNotFoundExceptions.
Java Programming: From Problem Analysis to Program Design, Second Edition
27
Unchecked Exceptions
 Exceptions that cannot be analyzed when the
program compiles (must be checked for by
programmer).
 Examples:
 Division by zero
 Array index out of bounds
 Syntax:
throws ExceptionType1, ExceptionType2,...
ExceptionType1, ExceptionType2, and so on are names
of exception classes
Java Programming: From Problem Analysis to Program Design, Second Edition
28
Exceptions Example Code
public static void exceptionMethod()
throws InputMismatchException,
FileNotFoundException
{
//statements
}
 The method exceptionMethod throws exceptions of the
type InputMismatchException and
FileNotFoundException.
Java Programming: From Problem Analysis to Program Design, Second Edition
29
The class Exception and
the Operator instanceof
 A reference of a superclass type can point to objects
of its subclass.
 You can determine if a reference variable points to
an object using the operator instanceof.
 You can combine catch blocks using this facility.
Java Programming: From Problem Analysis to Program Design, Second Edition
30
try
{
The class Exception and
the Operator instanceof
System.out.print("Line 4: Enter the "
+ "dividend: ");
dividend = console.nextInt();
System.out.println();
System.out.print("Line 7: Enter the "
+ "divisor: ");
divisor = console.nextInt();
System.out.println();
quotient = dividend / divisor;
System.out.println("Line 11: Quotient = "
+ quotient);
}
catch (Exception eRef)
{
if (eRef instanceof ArithmeticException)
System.out.println("Line 14: Exception "
+ eRef.toString());
else if (eRef instanceof InputMismatchException)
System.out.println("Line 16: Exception "
+ eRef.toString());
}
Java Programming: From Problem Analysis to Program Design, Second Edition
31
Rethrowing and Throwing an Exception
 When an exception occurs in a try block, control
immediately passes to one of the catch blocks.
 Typically, a catch block does one of the
following:
 Completely handles the exception.
 Partially processes the exception.
 In this case, the catch block either rethrows the
same exception or throws another exception for the
calling environment to handle the exception.
 Rethrows the same exception for the calling
environment to handle the exception.
Java Programming: From Problem Analysis to Program Design, Second Edition
32
Rethrowing and Throwing an Exception
 Useful when:
 Catch block catches exception but is unable to
handle it.
 Catch block decides exception should be handled
by calling environment.
 Allows programmer to provide exception handling
code in one place.
 Syntax:
throw exceptionReference;
Java Programming: From Problem Analysis to Program Design, Second Edition
33
Rethrowing and Throwing an Exception
import java.util.*;
public class RethrowExceptionExmp1
{
static Scanner console = new Scanner(System.in);
public static void main(String[] args)
{
int number;
try
{
number = getNumber();
System.out.println("Line 5: number = "
+ number);
}
catch (InputMismatchException imeRef)
{
System.out.println("Line 7: Exception "
+ imeRef.toString());
}
}
}
Java Programming: From Problem Analysis to Program Design, Second Edition
34
Rethrowing and Throwing an Exception
public static int getNumber()
throws InputMismatchException
{
int num;
try
{
System.out.print("Line 11: Enter an “
+ "integer: ");
num = console.nextInt();
System.out.println();
return num;
}
catch (InputMismatchException imeRef)
{
throw imeRef;
}
}
}
Java Programming: From Problem Analysis to Program Design, Second Edition
35
The Method printStackTrace
 Used to determine the order in which the methods
were called and where the exception was handled.
Java Programming: From Problem Analysis to Program Design, Second Edition
36
The Method printStackTrace
import java.io.*;
public class PrintStackTraceExample1
{
public static void main(String[] args)
{
try
{
methodA();
}
catch (Exception e)
{
System.out.println(e.toString()
+ " caught in main");
e.printStackTrace();
}
}
Java Programming: From Problem Analysis to Program Design, Second Edition
37
The Method printStackTrace
public static void methodA() throws Exception
{
methodB();
}
public static void methodB() throws Exception
{
methodC();
}
public static void methodC() throws Exception
{
throw new Exception("Exception generated "
+ "in method C");
}
}
Java Programming: From Problem Analysis to Program Design, Second Edition
38
The Method printStackTrace
Sample Run:
java.lang.Exception: Exception generated in method C
caught in main
java.lang.Exception: Exception generated in method C
at PrintStackTraceExample1.methodC
(PrintStackTraceExample1.java:31)
at PrintStackTraceExample1.methodB
(PrintStackTraceExample1.java:26)
at PrintStackTraceExample1.methodA
(PrintStackTraceExample1.java:22)
at PrintStackTraceExample1.main
(PrintStackTraceExample1.java:11)
Java Programming: From Problem Analysis to Program Design, Second Edition
39
Exception-Handling Techniques
 Terminate program.
 Output appropriate error message upon
termination.
 Fix error and continue.
 Repeatedly get user input.
 Output appropriate error message until valid value
is entered.
 Log error and continue.
 Write error messages to file and continue with
program execution.
Java Programming: From Problem Analysis to Program Design, Second Edition
40
Creating Your Own
Exception Classes
 Exception class you define extends class
Exception or one of its subclasses.
 Syntax to throw your own exception object:
throw new ExceptionClassName(messageString);
Java Programming: From Problem Analysis to Program Design, Second Edition
41
Creating Your Own Exception Classes
public class MyDivisionByZeroException
extends Exception
{
public MyDivisionByZeroException()
{
super("Cannot divide by zero");
}
public MyDivisionByZeroException(String
strMessage)
{
super(strMessage);
}
}
Java Programming: From Problem Analysis to Program Design, Second Edition
42
Event Handling
 Action events:
 Handled by implementing interface ActionListener.
 Window events:
 Handled by implementing interface WindowListener.
 Mouse events:
 Handled by implementing interface MouseListener.
 Key events:
 Handled by implementing interface KeyListener.
Java Programming: From Problem Analysis to Program Design, Second Edition
43
Event Handling
 class WindowAdapter:
 Implements interface WindowListener
with empty bodies to methods.
 class MouseAdapter:
 Implements interface MouseListener
with empty bodies to methods.
Java Programming: From Problem Analysis to Program Design, Second Edition
44
Registering Listeners
 To register window listener object to GUI component:
 Use method addWindowListener.
 Window listener object being registered is passed as
parameter to method addWindowListener.
 To register mouse listener object to GUI component:
 Use method addMouseListener.
 Mouse listener object being registered is passed as
parameter to method addMouseListener.
Java Programming: From Problem Analysis to Program Design, Second Edition
45
Registering Listeners
Java Programming: From Problem Analysis to Program Design, Second Edition
46
Registering Listeners
Java Programming: From Problem Analysis to Program Design, Second Edition
47
Registering Listeners
Java Programming: From Problem Analysis to Program Design, Second Edition
48
Programming Example:
Calculator
Java Programming: From Problem Analysis to Program Design, Second Edition
49
Chapter Summary
 Exception definition
 Handling exceptions within a program:




try/catch/finally block.
Order of catch blocks.
Using try/catch blocks in a program.
The class Exception and the Operator
instanceof.
 Rethrowing and throwing an exception.
Java Programming: From Problem Analysis to Program Design, Second Edition
50
Chapter Summary
 Exception
 Hierarchy
 Classes
 Checked and unchecked exceptions
 The method printStackTrace
 Exception handling techniques:
 Terminate program.
 Fix error and continue.
 Log error and continue.
 Creating your own exception classes
 Event handling
Java Programming: From Problem Analysis to Program Design, Second Edition
51