Question:
Is there any way to catch exceptions repeatedly, instead of just once? For example, when creating a
Date object with a
String, an
IllegalArgumentException can be
generated and caught. In the catch statement, if an attempt is made to create the
Date with another
String, there isn't anything I can do if it also throws an exception. Is there some
sort of looped catch statement?
Answer:
There is no such thing as a looped catch statement in Java. Code that requires such a construct should probably be restructured. Sometimes an exception handler is forced to catch an exception, but this does not require looping. A common example is a socket I/O operation that generates a fatal IOException. It is often
necessary to do some cleanup and call close() in the catch statement rather than a finally clause or later in the code. This call can also cause an exception, but the exception can be caught and ignored.
An exception is usually either fatal or recoverable. Recoverable exceptions are handled within the context of more general logic. For
example, if you are reading user input and receive an invalid date, you would probably ask the user to re-enter the date. This would be
handled in a loop and would require only one catch statement. For example:
do {
String input = getInput();
try {
date = new Date(input);
validInput = true;
} catch(IllegalArgumentException e) {
validInput = false;
printInvalidInputMessage();
}
} while(!validInput);