Difference Between the throw and throws Keywords
As
we can make out from the example of preceding post :
· The throw keyword (note the
singular form) is used to force an exception.
· It can also be used to pass
a customized message to the error-handling code.
· For example, the following
statement throws a custom message in the ArithmeticException:
new
ArithmeticException("Attempt to divide by zero");
· The throws keyword is used
when we know that a particular exception may be thrown or whenever we want to
pass a possible exception.
The final Re-throw in Java SE 7
We have seen so far that to throw an exception higher up the caller hierarchy, our method must declare that exception type in the throws clause of its declaration. Now, consider a situation where our method may want to throw two different types of exceptions, as shown in the following code snippet:
public void compute() throws IOException, ParseException {
try { // code which may generate IOException, ParseException } catch (Exception e){ throw e; } }
However, this code will not compile because we are trying to throw a more
generic exception.
For
the code to compile, we will need to add the Exception type in the throws
clause. This, too, will not compile if the compute method overrides a method
that does not declare throwing the Exception type (this is explained in the
next post). Java SE 7 solves this
problem when we add a final keyword
in the catch block, as follows:
catch
(final Exception e){
Using
the final keyword in the catch block allows us to throw the exact exception
subtype that occurred. For example, if IOException occurs, then IOException would
be thrown; if ParseException occurs, then ParseException would be thrown. The
final keyword allows us to throw the exact exception that occurred without the
need to add the Exception type to the method signature.
Declaring Exceptions in Overridden Methods
We have already learnt the benefits of creating inheritance hierarchies to produce highly structured code. When we extend the classes, we override some of their methods in their subclasses. What if some of these methods are already declared to throw a few exception types?
When we override these methods, we must observe certain rules:
·An overriding method must throw exceptions of the same type as the exceptions being thrown by the overridden method.
·An overriding method may throw exceptions that are subclasses of the exceptions being thrown by the overridden method.
·An overriding method cannot throw a superclass exception of an exception declared by an overridden method.
·In case of an overridden method throwing multiple exceptions, an overriding method must throw a proper subset of exceptions thrown by the overridden method.
Leave Comment
1 Comments
View All Comments