Download Chapter 12

Document related concepts

Functional programming wikipedia , lookup

Design Patterns wikipedia , lookup

Abstraction (computer science) wikipedia , lookup

Falcon (programming language) wikipedia , lookup

Scala (programming language) wikipedia , lookup

Go (programming language) wikipedia , lookup

Java syntax wikipedia , lookup

Reactive programming wikipedia , lookup

Control flow wikipedia , lookup

C++ wikipedia , lookup

Object-oriented programming wikipedia , lookup

Java (programming language) wikipedia , lookup

C Sharp syntax wikipedia , lookup

Java performance wikipedia , lookup

Structured programming wikipedia , lookup

C Sharp (programming language) wikipedia , lookup

Transcript
Java Programming: From Problem
Analysis to Program Design, 4e
Chapter 11
Handling Exceptions and Events
Chapter 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
Java Programming: From Problem Analysis to Program Design, 4e
2
Chapter Objectives (continued)
• 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, 4e
3
Exception
• Definition: 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, 4e
4
Handling Exception 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, 4e
5
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, and file
not found
• Division by zero is an arithmetic error and is
handled by the class
ArithmeticException
Java Programming: From Problem Analysis to Program Design, 4e
6
Java’s Mechanism of Exception
Handling (continued)
• When a division by zero exception occurs,
the program creates an object of the class
ArithmeticException
• 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, 4e
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
• The try block is followed by zero or more
catch blocks
• A catch block specifies the type of exception
it can catch and contains an exception handler
Java Programming: From Problem Analysis to Program Design, 4e
8
try/catch/finally Block
(continued)
• 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, 4e
9
try/catch/finally Block
(continued)
Java Programming: From Problem Analysis to Program Design, 4e
10
try/catch/finally Block
(continued)
•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, 4e
11
try/catch/finally Block
(continued)
• 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 after this catch
block 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, 4e
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, 4e
13
Order of catch Blocks
(continued)
• If in the heading of a catch block you declare
an exception using the class Exception,
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 declaring an exception of
a subclass type should be placed before catch
blocks declaring exceptions of a superclass type
Java Programming: From Problem Analysis to Program Design, 4e
14
Java Exception Hierarchy
Java Programming: From Problem Analysis to Program Design, 4e
15
Java Exception Hierarchy (continued)
Java Programming: From Problem Analysis to Program Design, 4e
16
Java Exception Hierarchy (continued)
Java Programming: From Problem Analysis to Program Design, 4e
17
Java Exception Hierarchy (continued)
Java Programming: From Problem Analysis to Program Design, 4e
18
Java Exception Hierarchy (continued)
Java Programming: From Problem Analysis to Program Design, 4e
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, 4e
20
The class Exception and
its Constructors
Java Programming: From Problem Analysis to Program Design, 4e
21
Java Exception Classes
Java Programming: From Problem Analysis to Program Design, 4e
22
Java Exception Classes
(continued)
Java Programming: From Problem Analysis to Program Design, 4e
23
Java Exception Classes (continued)
Java Programming: From Problem Analysis to Program Design, 4e
24
Java Exception Classes (continued)
Java Programming: From Problem Analysis to Program Design, 4e
25
Java Exception Classes (continued)
Java Programming: From Problem Analysis to Program Design, 4e
26
Java Exception Classes (continued)
Java Programming: From Problem Analysis to Program Design, 4e
27
Java Exception Classes (continued)
Java Programming: From Problem Analysis to Program Design, 4e
28
Java Exception Classes (continued)
Java Programming: From Problem Analysis to Program Design, 4e
29
Checked Exceptions
• Definition: any exception that can be
recognized by the compiler
• Examples
– FileNotFoundExceptions
Java Programming: From Problem Analysis to Program Design, 4e
30
Unchecked Exceptions
• Definition: exceptions that cannot be recognized
when the program compiles (must be checked for
by programmer)
• Examples
– Division by zero
– Array index out of bounds
• Syntax
• ExceptionType1, ExceptionType2, and
so on are names of exception classes
Java Programming: From Problem Analysis to Program Design, 4e
31
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, 4e
32
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, 4e
33
The class Exception and
the Operator instanceof
try
{
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, 4e
34
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, 4e
35
Rethrowing and Throwing an
Exception (continued)
• 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, 4e
36
Rethrowing and Throwing an
Exception (continued)
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, 4e
37
Rethrowing and Throwing an
Exception (continued)
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, 4e
38
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, 4e
39
The Method printStackTrace
(continued)
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, 4e
40
The Method printStackTrace
(continued)
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, 4e
41
The Method printStackTrace
(continued)
• 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:30)
at PrintStackTraceExample1.methodB
(PrintStackTraceExample1.java:25)
at PrintStackTraceExample1.methodA
(PrintStackTraceExample1.java:20)
at PrintStackTraceExample1.main
(PrintStackTraceExample1.java:9)
Java Programming: From Problem Analysis to Program Design, 4e
42
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, 4e
43
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, 4e
44
Creating Your Own Exception
Classes (continued)
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, 4e
45
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, 4e
46
Event Handling (continued)
• 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, 4e
47
Registering Listeners
• Registering window listener object to GUI
component
– Use method addWindowListener
– Window listener object being registered is passed
as parameter to method addWindowListener
• Registering 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, 4e
48
Event Handling (continued)
Java Programming: From Problem Analysis to Program Design, 4e
49
Event Handling (continued)
Java Programming: From Problem Analysis to Program Design, 4e
50
Event Handling (continued)
Java Programming: From Problem Analysis to Program Design, 4e
51
Programming Example:
Calculator
Java Programming: From Problem Analysis to Program Design, 4e
52
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
• Exception
– Hierarchy
– Classes
Java Programming: From Problem Analysis to Program Design, 4e
53
Chapter Summary (continued)
• 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, 4e
54