An exception is
a problem that arises during the execution of a program. When an Exception occurs the normal flow of the program is disrupted
and the program terminates abnormally, which is not recommended. The mechanism to handle such scenarios known
as Exception Handling.
Few exceptions are NullPointerException, ClassNotFoundException,
IOException, SQLException, RemoteException etc.
Advantage of Exception Handling
The main advantage of exception handling
is to maintain the normal flow of the application.
See the scenario below.
statement 1;
statement 2;
statement 3;//exception occurs
statement 4;
statement 5;
Suppose there are 5 statements in Java
program and there occurs an exception at statement 3, the rest of the code will
not be executed i.e. statement 4 and 5 will not be executed. However, we can be executed the rest of the statement by exception
handling.
Java Exception Handling Keywords
Java provides specific keywords for
exception handling purposes. See the list below.
try-catch – try-catch block is
used to handle exception in code. try is the start of the block and catch is at
the end of try block to handle the exceptions. try block can have multiple catch
blocks and try-catch block can be nested also. catch block requires a parameter
that should be of type or subtype Exception.
try-catch example
public class TryCatchExample {
public static void
main(String[] args) {
try {
int data = 50 / 0;// may throw exception
System.out.println(data);
}
catch (ArithmeticException e) {// handling the
exception
System.err.println(e);
}
System.out.println("rest of the code");
}
}
try-multiple catch example
public class TryCatchExample {
public static void
main(String[] args) {
try {
int data = 50 / 0;// may throw exception
System.out.println(data);
}
catch (ArithmeticException e) {// handling the
exception
System.err.println(e);
}
catch (NullPointerException e) {// handling the
exception
System.err.println(e);
}
System.out.println("rest of the code");
}
}
try-multiple catch Java 7 example
After Java 7 release, we can club multiple catches
using pipeline separator.
public class TryCatchExample {
public static void
main(String[] args) {
try {
int data = 50 / 0;// may throw exception
System.out.println(data);
}
catch (ArithmeticException | NullPointerException
e) {// handling the
exception
System.err.println(e);
}
System.out.println("rest of the code");
}
}
finally – finally block is
optional and can be used only with try or try-catch block. Since exception
halts the process of execution, the program might have some resources open that
will not get closed, so it can be closed in finally block as finally block executed
always, whether an exception occurred or not.
class
TestFinallyBlock {
public static void
main(String args[]) {
try {
int data = 25 / 0;
System.out.println(data);
}
catch (NullPointerException e) {
System.out.println(e);
}
finally {
System.out.println("finally block is always executed");
}
System.out.println("rest of the code...");
}
}
Output:
finally block is always executed
Exception in thread "main" java.lang.ArithmeticException: / by zero
at
com.algorithmforum.gson.TestFinallyBlock.main(TestFinallyBlock.java:6)
throw – If any exception occurs, an
exception object is getting created and then Java runtime starts processing to
handle them. Sometime it might require to generate exception explicitly in code,
for example in user authentication, the program should throw an exception to the client if the password is null. throw keyword
is used to throw an exception to the runtime to handle it.
class
InvalidAge extends RuntimeException {
private static final long serialVersionUID = 1L;
public InvalidAge(String string) {
super(string);
}
}
public class TestThrowKeyword {
private static void validate(int age) {
if (age < 18) {
throw new InvalidAge("not valid");
}
else {
System.out.println("welcome to vote");
}
}
public static void
main(String args[]) {
validate(13);
System.out.println("rest of the code...");
}
}
Output:
Exception in thread "main"
com.algorithmforum.gson.InvalidAge: not valid
at
com.algorithmforum.gson.TestThrowKeyword.validate(TestThrowKeyword.java:15)
at
com.algorithmforum.gson.TestThrowKeyword.main(TestThrowKeyword.java:22)
throws – When the program is
throwing an exception in a method and no need to handle it, throws keyword need
to use in method signature to let the caller program know the exceptions that might
be thrown by the method. The caller method might handle these exceptions or
propagate it to its caller method using throws keyword. Multiple exceptions can
provide in the throws clause and it can be used with main() method also.
class
InvalidAge extends Exception {
private static final long serialVersionUID = 1L;
public InvalidAge(String string) {
super(string);
}
}
public class TestThrowKeyword {
private static void validate(int age) throws InvalidAge {
if (age < 18) {
throw new InvalidAge("not valid");
}
else {
System.out.println("welcome to vote");
}
}
public static void
main(String args[]) throws InvalidAge {
validate(13);
System.out.println("rest of the code...");
}
}