A Bit About Exception Handling
One of the things I kept trying to illustrate in our earlier programs was
how they terminated if even the tiniest little thing wasn't done
correctly. We all know how this sort of thing can be a problem when
working with computers. But, on the other hand, how is a user
supposed to know what the did wrong?
Exception handling is the most polite term used to describe efforts at coding to deal with things that don't go exactly as planned when interacting with end users. Other terms used by computer people are error handling and error trapping.
The idea is to write code so that if the user doesn't do things as desired then the program doesn't just blow up. Hopefully the program maintains functionality and gives the user feedback about how they should improve their interaction.
Java has some built in classes, Exception in particular, and methods to help developers bring about such lofty goals. This is a topic we will delve into throughout our two semesters of Java. This webpage will present an overall summary of many of the options for exception handling that are available in Java. In future webpages we will focus on a few of them at a time and get into more depth.
The following diagram represents some of the subclasses of the class Exception that are included in the package java.lang.
|Unfortunately, I have seen far too many of these
exceptions when developing my own code. You are likely to get to
know them all too well as you work in Java.
The following tables will overview a variety of these so we can refer back to them in future webpages. First, we will give brief descriptions about some of the above classes.
|Arithmetic Exception||arithmetic errors such as division by zero|
|ArrayIndexOutOfBoundsException||an array index is either less than zero or greater than or equal to the declared upper limit|
|FileNotFoundException||reference to a file cannot be found|
|IllegalArgumentException||calling a method with illegal arguments|
|IndexOutOfBoundsException||an array index is out of bounds|
|NullPointerException||reference to an object that has not been instantiated|
|NumberFormatException||use of an illegal number format|
|StringIndexOutOfBoundsException||a string index is either less than zero or greater than or equal to the length of the string|
|We will actually see more than these and develop some
of our own classes to handle some others during this course.
Try/Catch/Finally Blocks. Now we need to discuss a couple of the major aspects of the overall structure used to deal with exception handling in Java. We won't see any specific examples until the next webpage, but this discussion will provide some fundamental and recurring structure when exception handling.
Statements that might generate an exception that we are trying to handle are placed in a try block. If an exception occurs within the block of code we are trying then program control attempts to shift to a catch block. The catch block must specify the type of exception it is intended to handle. There may also be more than one catch block. Too often, there are none.
In the end, code that should execute regardless of whether an exception occurs is placed in a finally block. If a try block has no catch blocks then it must have a finally block.
The basic structure associated with try and catch blocks is given in the following table.
catch (ExceptionClassName1 reference1)
catch (ExceptionClassName2 reference2)
. . .
catch (ExceptionClassNameN referenceN)
|Several rules are important to know
This is enough of our probably far too abstract presentation about try and catch blocks. The next web page will develop code using try and catch blocks to deal with the difficulties we were encountering with our inputs in the message box programs.