Catching Normal Exceptions
The exceptions that are generated by methods are referred to as normal exceptions. We have already learned that to catch an exception we use try and catch block.
The code above shows how to handle multiple exceptions. We have used myTestException(); method here which generates two different types of exceptions handled by separate catch clauses in a unique manner. By comparing the exception type, the catch clauses are examined whenever an exception occurs in a try block A match will occur whenever the type of exception is same as that in catch clause or same as the subclass in the catch clause. Hence due to this multilevel catch handlers can be provided which are based on more derived exception types. Lets see one more example:
Here we have created a file input stream and the constructor which takes a file name to read from will throw FileNotFoundException if the file couldn't be found. Within a try block an object is created that handles the exception FileNotFoundException in a catch block as the constructor is capable of throwing this exception.
Catching Runtime Exceptions
The exceptions which are not easily traced are known as Runtime Exceptions. For instance,
The above code displays a for loop trying to divide a number by zero in its last iteration which would result in runtime exception. We have used try block to handle this exception and a corresponding handler by means of a catch clause. And if we won't handle the exception the program will end up with the termination.
The disadvantage in handling the runtime exception is that we need to put the doubtful code inside a try block. This approach sometimes causes a mess so its always better to avoid the problems which land you up with the troubles.