Exceptions Rethrowing with Improved Type Checking

In this section, you will learn about the Java SE 7 exception rethrowing with improved type checking.

Exceptions Rethrowing with Improved Type Checking

In this section, you will learn about the Java SE 7 exception rethrowing with improved type checking.

Exceptions Rethrowing  with Improved Type Checking

Exceptions Rethrowing  with Improved Type Checking

In this section, you will learn about the Java SE 7 exception rethrowing with improved type checking.

Take a a look at the following code having improved type checking of Java SE 7 :

Two classes FirstException and SecondException is given below :

static class FirstException extends Exception { }
static class SecondException extends Exception { }

The third class, containing improved type checking, which have the following method :

public void rethrowException(String exceptionName)
throws FirstException, SecondException {
try {
if (exceptionName.equals("First")) {
throw new FirstException();
} else { 
throw new SecondException();
}
}
catch (Exception e) {
throw e;
}
}

The above code will only execute using Java SE 7 , If you will try to execute it through prior version than Java 7, you will get the error " unreported exception Exception; must be caught or declared to be thrown " .

The reason behind this is - the type of the catch parameter e is Exception, which is a supertype, not a subtype, of FirstException and SecondException.  Throws must be like this : "throws Exception" to compile the above code prior to Java 7.

But now(in Java SE 7), you can throw an exception that is a supertype of the throws type. Here Exception is the super type of the FirstException and SecondException.

The complete Code is given below :

import java.io.*;

public class J7RethrowingException {
public void rethrowException(String exceptionName)
throws FirstException, SecondException {
try {
if (exceptionName.equals("First")) {
System.out.println("FirstException is thrown");
throw new FirstException();

} else {
System.out.println("SecondException is thrown");
throw new SecondException();
}
}
catch (Exception e) {
throw e;
}
}
public static void main(String args[])throws FirstException, SecondException{
new J7RethrowingException().rethrowException("First");
}
}

OUTPUT

C:\Program Files\Java\jdk1.7.0\bin>javac J7RethrowingException.java

C:\Program Files\Java\jdk1.7.0\bin>java J7RethrowingException
FirstException is thrown
Exception in thread "main" FirstException
at J7RethrowingException.rethrowException(J7RethrowingException.java:9)
at J7RethrowingException.main(J7RethrowingException.java:21)

Download Source Code