Вы находитесь на странице: 1из 34

Chapter Eight

Exception Handling

1
Objectives

• Learn about exceptions and the Exception


class
• How to purposely generate a
SystemException
• Learn about traditional error-handling
methods
• Learn about object-oriented exception-
handling methods

2
Objectives

• How to use the Exception class’s ToString()


method and Message field
• How to catch multiple Exceptions
• How to use the finally block
• How to handle an Exception with a loop

3
Objectives

• How to throw an Exception


• How to trace Exceptions through the call stack
• How to create your own Exception classes

4
Understanding Exceptions

• An exception is any error condition or unexpected


behavior in an executing program
• Certain errors are called exceptions because they are
not usual occurrences
• The object-oriented technique used to manage
exceptions make up the group of methods known as
exception handling
• In C#, all exceptions are objects

5
Understanding Exceptions

• Most exceptions you will use derive from two


classes that in turn derive from the Exception
class
– The predefined Common Language Runtime
exception classes derived from SystemException
– The user-defined application exception classes you
derive from ApplicationException

6
Purposely Generating a SystemException

• You can deliberately generate a SystemException


exception by forcing a program to contain an error

7
Purposely Generating a SystemException

• The DivideByZeroException object below was


generated automatically by C#
• Just because an Exception occurs when an Exception
object is created, you don’t necessarily have to deal with
it

8
Understanding Object-Oriented Exception-
Handling Methods
• In object-oriented terminology, you “try” a procedure that
may not complete correctly
• A method that detects an error condition or Exception
“throws” an Exception
• The block of code that processes the error “catches” the
Exception

9
Understanding Object-Oriented Exception-
Handling Methods
• When you write a block of code in which
something can go wrong, you can place the
code in a try block, consisting of:
– The keyword try
– An opening curly brace
– Statements that might cause Exceptions
– A closing curly brace

10
Understanding Object-Oriented Exception-
Handling Methods
• You create a catch block with the following elements:
– The keyword catch, followed by an opening parenthesis, the
Exception type, a name for an instance of the Exception type,
and a closing parenthesis
– An opening curly brace
– Statements that take the action you want to use to deal with the
error condition
– A closing curly brace

11
Understanding Object-Oriented Exception-
Handling Methods

• General form of a try…catch pair


12
Using the Exception Class’s ToString()
Method and Message Field
• Any Exception generated from within a try block would
be caught by a catch block whose argument is an
Exception type (e.g., Exception e); there is no way to
confirm the origin of the Exception
• You can use the ToString() method to provide a
descriptive error message
• The Exception class also contains a field named
Message that contains useful information about an
Exception

13
Using the Exception Class’s ToString()
Method and Message Field

• Output of UsingTheException program when user enters 0 for


second number
14
Catching Multiple Exceptions

• You can place as many statements as you need within a


try block, and you can catch as many different
Exceptions as you want
• If you place more than one statement in a try block, only
the first error-generating statement throws an Exception
• When multiple catch blocks are present, they are
examined in sequence until a match is found for the
Exception that occurred

15
Catching Multiple Exceptions

• TwoErrors class with two catch blocks


16
Catching Multiple Exceptions

• Output of TwoErrors program


17
Catching Multiple Exceptions

• If you reverse the two try statements within the


TwoErrors class, the output of the program changes

18
Catching Multiple Exceptions

• When you want to execute the same code, no matter


what type of Exception occurs, you can use only one
catch block, which receives type Exception

19
Catching Multiple Exceptions

• The Exception class is the base class for all Exception


objects and therefore can reference all Exception
descendants
• The catch block in the previous code accepts all
Exception argument types
• When you list multiple catch blocks following a try, you
must be careful that some catch blocks don’t become
unreachable

20
Catching Multiple Exceptions

• Program with unreachable catch block


21
Catching Multiple Exceptions

• Error message generated by UnreachableCatch program

22
Using the finally Block

• The code within a finally block executes whether or not


the try block identifies an Exception
• Typically, the finally block is used to perform clean-up
tasks
• When you include a finally block, you are assured that
the finally statements will execute before the program is
abandoned

23
Using the finally Block

• General form of a try…catch block with a finally block

24
Handling an Exception with a Loop

• Different programs require different ways of handling


Exceptions
• In some cases, the try-catch sequence could be placed
in a loop that continues to execute until the code is
successful

25
Throwing Exceptions

• An advantage of using object-oriented exception-


handling techniques is the ability to deal with Exceptions
appropriately as you make conscious decisions about
how to handle them
• When methods from other classes throw Exceptions,
they don’t have to catch them
• When you design your own classes that might cause
Exceptions, you should create them to throw the
Exception but not to handle it
• Handling an Exception should be left to the client (the
program that uses the class)

26
Throwing Exceptions

• Two executions of TrySoccerPlayer1 program

27
Throwing Exceptions

• Execution of TrySoccerPlayer2 program


28
Tracing Exceptions Through the Call Stack

• The memory location where the computer stores the list


of locations to which the system must return (after
method calls) is known as the call stack
• When a method throws an Exception, if the method does
not catch it, then the Exception is thrown to the next
method “up” the call stack
• You can print the value of the StackTrace field to display
a list of methods in the call stack so you can determine
the location of the Exception

29
Tracing Exceptions Through the Call Stack

• The StackTrace field can be a useful debugging tool

30
Creating Your Own Exception Classes

• You can create your own customized Exception class for


your application
• To create your own Exception that you can throw, you
should extend the ApplicationException class
• You should not create an excessive number of special
Exception types for your class because it adds a level of
complexity to your program

31
Chapter Summary

• An exception is any error condition or unexpected


behavior in an executing program
• You can purposely generate a SystemException
exception by forcing a program to contain an error
• When you think an error will occur frequently, it is most
efficient to handle it in the traditional way, with if
statements
• In object-oriented terminology, you “try” a procedure that
may not complete correctly

32
Chapter Summary

• Every Exception object contains a ToString() method and


a Message field
• You can place as many statements as you need within a
try block, and you can catch as many different
Exceptions as you want
• When you have actions to perform at the end of a
try…catch sequence, you can use a finally block
• When you want to keep trying a block of code until some
value or state within a program is correct, you can place
a try…catch block within a loop

33
Chapter Summary

• When methods throw Exceptions, they don’t have to


catch them; instead, the program that calls a method that
throws an Exception can catch it and determine what to
do
• When a method throws an Exception, if the method does
not catch it, then the Exception is thrown to the method
that called the offending method
• To create your own Exception that you can throw, you
should extend the ApplicationException class

34

Вам также может понравиться