Title: Exception Handling
1Exception Handling
2Reminders
- Project 5 due Oct 20 _at_ 1030 pm
- Project 3 regrades due by midnight tonight
- Discussion groups now twice a week (7-9 pm M in
CS G066, W in Phys 11)
3Exam 2
- Tuesday, October 25
- 700 800 PM
- Physics 112
- Covers chapters 5-9 (and material from 1-4 as
well) - Same format as exam 1
- 20 MC
- 5 programming
4Introduction
- A program can be written assuming that nothing
unusual or incorrect will happen. - The user will always enter an integer when
prompted to do so. - There will always be a nonempty list for a
program that takes an entry from the list. - The file containing the needed information will
always exist. - Unfortunately, it isnt always so.
5Exception Handling
- Either your code or Java signals when something
unusual happens. - The signaling process is called throwing an
exception. - Somewhere in your program, you can place code to
handle the exception.
6Exceptions in Java Example, cont.
- simple example, cont.
- But what if there is no milk?
- An attempt to divide the number of donuts by the
number of glasses of milk will result in an
attempt to divide by zero. - This would be an utter (udder?) disaster, known
in Java as an exception.
7Exceptions in Java Example, cont.
- In Java, it is possible to test for this unusual
situation using an if-else statement, for example.
8(No Transcript)
9Exceptions in Java Example, cont.
10Exceptions in Java Example, cont.
- In Java, it is also possible to throw an
exception.
11(No Transcript)
12Exceptions in Java Example, cont.
13Defining Exception Classes
- You can define your own exception classes, but
they must be derived from an existing exception
class. - Constructors are the most important, and often
the only methods (except for methods inherited
from the base class).
14Defining Exception Classes, cont.
- class DivideByZeroException
15(No Transcript)
16Java Tip Preserve getMessage
- For all predefined exception classes, method
getMessage returns either - the string that is passed as an argument to the
constructor or - a default string if no argument is passed to the
constructor. - The behavior of method getMessage should be
preserved in any exception class you define.
17Java Tip Preserve getMessage, cont.
- This is done by including a string parameter that
begins with a call to super. - public MyException(String message)
-
- super(message)
- More_Code_If_Appropriate
18Java Tip Preserve getMessage, cont.
- Also include a default constructor.
- public MyException()
-
- super(MyException thrown)
- More_Code_If_Appropriate
-
19Programming Tip When to Define an Exception Class
- In general, define an exception class if you are
going to insert a throw statement in your code. - This permits catch blocks to distinguish between
your exceptions and exceptions thrown by
predefined methods.
20Guidelines
- Use class Exception as the base class unless
there is a compelling reason to do otherwise. - Define at least two constructors. Typically, no
other methods are needed. - Begin each constructor definition with a call to
the constructor of the base class.
21Declaring Exceptions (Passing the Buck)
- Sometimes is it appropriate to handle an
exception other than in the method where the
exception occurred. - For example, it might be better to handle the
exception in the method that called the method
that called the method that threw the exception
22Declaring Exceptions, cont.
- If a method can throw an exception but does not
catch it, it must alert the programmer to the
possibility of an exception by including a throws
clause. - Example
- public void someMethod()
- throws DivideByZeroException
23Accounting for Exceptions
- An exception can be caught in a catch block
within a method definition. - Alternatively, the possibility of an exception
can be declared at the start of the method
definition by placing the exception-class name in
a throws clause. - These two approaches can be mixed in a method,
catching some exceptions and declaring others in
a throws clause.
24Accounting for Exceptions, cont.
- If method_A uses a throws clause instead of
handling an exception and method_B calls
method_A, then method_B either must handle the
exception or must also include a throws clause.
25(No Transcript)
26Accounting for Exceptions, cont.
- A throws clause can include more than one
exception type. - example
- public int someMethod()throws
- IOException, DivideByZeroException
27Accounting for Exceptions, cont.
- Some method in the calling hierarchy should
handle the exception. - If an exception is thrown, but never caught,
either the program terminates or its behavior
becomes unreliable.
28Exceptions That Need Not Be Caught
- Some exceptions do not need to be accounted for
in any way. - (Perhaps these are the exceptions that prove the
rule about needing to account for exceptions.) - Exceptions that do not need to be accounted for
result from errors and usually are thrown by
methods in predefined classes.
29throws Clauses in Derived Classes
- When a method is redefined in a derived class,
the redefined method cannot contain any exception
classes that are not in the throws clause of the
same method in the base class (though the derived
class can list fewer exceptions in its throws
clause). - Any exceptions thrown in the derived class must
be caught or thrown by the base class.
30Multiple Throws and Catches
- A try block can throw any number of different
types of exceptions. - Each catch block can catch only one type of
exception. - Multiple catch blocks after a try block can catch
multiple types of exceptions.
31(No Transcript)
32Java Tip Catch the More Specific Exceptions First
- catch blocks are examined in order.
- The first matching catch block is executed.
- More specific exceptions should precede less
specific exceptions, i.e. exceptions lower in the
exception hierarchy should come before exceptions
higher in the exception hierarchy.
33Keep It Simple
- Attempt to modify a program or class definition
so that it does not need a throw statement. - In general, use exceptions sparingly.
- If the way the exception is handled depends on
the calling method, let the calling method handle
the exception. - Consider throwing the exception and catching the
exception in separate methods.
34Keep It Simple, cont.
- public void methodB()
-
- ...
- try
-
- ...
- methodA()
- ...
-
- catch (MyException e)
- ...
35The finally Block
- A finally block can be added after a try block
and its catch blocks. - The finally block is executed
- if the try block throws no exceptions
- if the try block throws an exception which is
caught by a catch block - if an exception is thrown but not caught
- i.e. it is always executed.
36The finally Block, cont.
- syntax
- try
-
-
-
- catch Block(s)
- finally
-
-
37- try
- doMethod(test)
-
- catch (Exception e)
- System.out.println(Exception)
- return
-
- finally
- System.out.println(Done)
-
- return
- If doMethod() throws an exception, what is the
output?
38Output
39Output
40Graphics Supplement Exceptions in GUIs
- An uncaught exception in a (non-GUI) application
will end the program. - An uncaught exception in a GUI program (either a
JFrame GUI or an applet) will not end the
program. - However, unless the exception is caught, the GUI
may not cope correctly with the exception or the
user may receive insufficient instructions.
41Programming Example A JFrame Using Exceptions
- The example JFrame GUI allows the user to write
the name of a color in a text field and to click
the Show Color button. - If the GUI recognizes the color, the background
color changes to the named color. - Otherwise, the text field displays Unknown
Color and the background changes to gray.
42Programming Example A JFrame Using Exceptions,
cont.
43Programming Example A JFrame Using Exceptions,
cont.
- class UnknownColorException
44Programming Example A JFrame Using Exceptions,
cont.
45Programming Example A JFrame Using Exceptions,
cont.
46throws Clause Not Allowed in actionPerformed
- A throws clause cannot be added to method
actionPerformed in any action listener class. - Any exception thrown in method actionPerformed
must be caught in method actionPerformed. - Similarly, if method windowClosing is redefined
in a window listener class, you may not add a
throws clause to method windowClosing.
47Summary
- You have become familiar with the notion of
exception handling. - You have learned Java syntax for exception
handling. - You have learned to use exception handling
effectively in classes and programs.