Exception Handling
The exception handling in java is one of the powerful mechanisms to handle the runtime errors
so that normal flow of the application can be maintained.
What is exception?
Dictionary Meaning: Exception is
an abnormal condition.
In java, an exception is an event that disrupts the normal
flow of the program. It is an object which is thrown at runtime.
What is exception handling?
Exception
Handling is a mechanism to handle runtime errors such as ClassNotFound, IO,
SQL, Remote, etc.
Advantage of Exception Handling
- statement 1;
- statement 2
- statement 3
- statement 4;
- statement 5; //exception occurs
- statement 6;
- statement 7;
- statement 8;
- statement 9;
- statement 10;
Suppose there
is 10 statements in your program and there occurs an exception at statement 5,
rest of the code will not be executed i.e. statements 6 to 10 will not run. If
we perform exception handling, rest of the statement will be executed. That is
why we use exception handling in java.
Types of Exception
There are
mainly two types of exceptions: checked and unchecked where the error is considered
as unchecked exception. Sun Microsystems says there are three types of
exceptions:
- Checked Exception
- Unchecked Exception
- Error
Difference between checked and unchecked exceptions
1) Checked Exception
The classes
that extend Throwable class except RuntimeException and Error are known as
checked exceptions e.g. IOException, SQLException, etc. Checked exceptions are
checked at compile-time.
2) Unchecked Exception
The classes
that extend RuntimeException are known as unchecked exceptions e.g.
ArithmeticException, NullPointerException, and ArrayIndexOutOfBoundsException
etc. Unchecked exceptions are not checked at compile-time rather they are
checked at runtime.
3) Error
Error is
irrecoverable e.g. OutOfMemoryError, VirtualMachineError, AssertionError etc.
Common scenarios where exceptions may
occur
There are given
some scenarios where unchecked exceptions can occur. They are as follows:
1) Scenario where ArithmeticException occurs
If we divide
any number by zero, there occurs an ArithmeticException.
1.
int a=50/0;//ArithmeticException
2) Scenario where NullPointerException occurs
If we have null
value in any variable, performing any operation by the variable occurs an
NullPointerException.
1.
String s=null;
2.
System.out.println(s.length());//NullPointerException
3) Scenario where NumberFormatException occurs
The wrong
formatting of any value may occur NumberFormatException. Suppose I have a
string variable that has characters, converting this variable into a digit will
occur NumberFormatException.
1.
String s="abc";
2.
int i=Integer.parseInt(s);//NumberFormatException
4) Scenario where ArrayIndexOutOfBoundsException occurs
If you are
inserting any value in the wrong index, it would result
ArrayIndexOutOfBoundsException as shown below:
1. int a[]=new int[5];
2. a[10]=50; //ArrayIndexOutOfBoundsException
Java Exception Handling Keywords
There are 5
keywords used in java exception handling.
1.
try
2.
catch
3.
finally
4.
throw
5.
throws
JAVA TRY BLOCK
Java try block
is used to enclose the code that might throw an exception. It must be used
within the method.
Java try block
must be followed by either catch or finally block.
Syntax of java try-catch
1.
try{
2.
//code that may throw an exception
3.
}catch(Exception_class_Name ref){}
Syntax of try-finally block
1.
try{
2.
//code that may throw an exception
3.
}finally{}
JAVA CATCH
BLOCK
Java catch
block is used to handle the Exception. It must be used after the try block
only.
You can use
multiple catch block with a single try.
The problem without exception handling
Let's try to understand the problem if we don't use try-catch block
Output:
Exception in thread main java.lang.ArithmeticException:/
by zero
Solution by exception handling
Let's see the solution to the above problem by java try-catch block.
Exception in thread main java.lang.ArithmeticException:/
by zero rest of the code...
JAVA MULTI
CATCH BLOCK
If you have to
perform different tasks at the occurrence of different Exceptions, use java
multi-catch block.
Let's see a
simple example of java multi-catch block.
1.
public class TestMultipleCatchBlock{
2.
public static void main(String args[]){
3.
try{
4.
int a[]=new int[5];
5.
a[5]=30/0;
6.
}
7.
catch(ArithmeticException e){System.out.println("task1 is completed");}
8.
catch(ArrayIndexOutOfBoundsException e){System.out.println("task 2 completed");}
9.
catch(Exception e){System.out.println("common task completed");}
10.
11.
System.out.println("rest of the code...");
12.
}
13.
}
Output:task1 completed
rest of the
code...
Rule: At a time only one Exception is occurred and at a time only one catch block is executed.
Rule: All catch blocks must be ordered from most specific to
most general i.e. catch for ArithmeticException must come before catch for
Exception.
Java Nested try block
The try block
within a try block is known as nested try block in java.
Why use a nested try block
Sometimes a
situation may arise where a part of a block may cause one error and the entire
block itself may cause another error. In such cases, exception handlers have to
be nested.
Java nested try the example
JAVA FINALLY BLOCK
Java finally the block is a block
that is used to execute important code such as closing connection,
stream etc.
Java finally the block is always executed whether an exception is handled or not. Java finally blocks follows try or catch block.
Note: If you don't handle exception,
before terminating the program, JVM executes finally block (if any).
Why use java
finally
Finally, block
in java can be used to put "cleanup" code such as closing a file,
closing connection etc.
Usage of Java finally
Let's see the different cases where java finally blocks
can be used
Rule: For each
try block there can be zero or more catch blocks, but only one finally block.
Note: The
finally block will not be executed if the program exits(either by calling
System. exit() or by causing a fatal error that causes the process to abort).
JAVA THROW KEYWORD
The Java throw keyword is used to explicitly throw an exception.
We can throw
either checked or unchecked exception in java by throw keyword. The throw
keyword is mainly used to throw a custom exception
The syntax of the java throw keyword is given below.
1. throw an exception;
java throw
keyword example
we have created the validate method that takes an integer value as a parameter. If the age is less than 18, we are throwing the ArithmeticException otherwise print a message welcome to vote
Java Exception propagation
An exception
is first thrown from the top of the stack and if it is not caught, it drops
down the call stack to the previous method, If not caught there, the the exception again drops down to the previous method, and so on until they are
caught or until they reach the very bottom of the call stack. This is called
exception propagation. |
Rule: By default Unchecked Exceptions are forwarded in
calling chain (propagated).
In the above example exception occurs in m() method where it is not handled, so it is propagated to previous n() method where it is not handled, again it is propagated top() method where an exception is handled.
Exception can
be handled in any method in call stack either in main() method,p() method,n()
method or m() method.
Rule: By default, Checked Exceptions are not forwarded in
calling chain (propagated).
JAVA THROWS KEYWORD
The Java
throws keyword is used to declare an exception. It gives information to the
programmer that there may occur an exception so it is better for the programmer
to provide the exception handling code so that normal flow can be maintained.
Exception
Handling is mainly used to handle the checked exceptions. If there occurs any
unchecked exception such as NullPointerException, it is programmers fault that
he is not performing check up before the code being used.
Syntax of java throws
1.
return_type method_name() throws exception_class_name{
2.
//method code
3.
}
Java throws example
Let's see the example of java throws clause which describes that checked exceptions can be propagated by throwing keywords.
Rule: If you are calling a method that declares an
exception, you must either caught or declare the exception.
Can we rethrow an exception?
Yes, by
throwing same exception in catch block.
Difference Between
Throw And Throws In Java
There are many
differences between throw and throws keywords. A list of differences between
throw and throws are given below:
No. |
throw |
throws |
1) |
Java throw keyword
is used to explicitly throw an exception. |
Java throws
keyword is used to declare an exception. |
2) |
Checked
exception cannot be propagated using throw only. |
Checked
exception can be propagated with throws. |
3) |
Throw is
followed by an instance. |
Throws is
followed by class. |
4) |
Throw is used
within the method. |
Throws is
used with the method signature. |
5) |
You cannot
throw multiple exceptions. |
You can
declare multiple exceptions e.g. |
Java throw example
1.
void m(){
2.
throw new ArithmeticException("sorry");
3.
}
Java throws example
1.
void m()throws ArithmeticException{
2.
//method code
3.
}
Java throw and throws example
1.
void m()throws ArithmeticException{
2.
throw new ArithmeticException("sorry");
3.
}
There are many
differences between final, finally and finalize. A list of differences between
final, finally and finalize are given below:
No. |
final |
finally |
finalize |
1) |
Final is used
to apply restrictions on class, method and variable. Final class can't be
inherited, final method can't be overridden and final variable value can't be
changed. |
Finally is
used to place important code, it will be executed whether exception is
handled or not. |
Finalize is
used to perform clean up processing just before object is garbage collected. |
2) |
Final is a
keyword. |
Finally is a
block. |
Finalize is a
method. |
Java final example
1.
class FinalExample{
2.
public static void main(String[] args){
3.
final int x=100;
4.
x=200;//Compile Time Error
5.
}}
Java finally example
1.
class FinallyExample{
2.
public static void main(String[] args){
3.
try{
4.
int x=300;
5.
}catch(Exception e){System.out.println(e);}
6.
finally{System.out.println("finally block is executed");}
7.
}}
Java finalize example
1.
class FinalizeExample{
2.
public void finalize(){System.out.println("finalize called");}
3.
public static void main(String[] args){
4.
FinalizeExample f1=new FinalizeExample();
5.
FinalizeExample f2=new FinalizeExample();
6.
f1=null;
7.
f2=null;
8.
System.gc();
9.
}}
ExceptionHandling with
MethodOverriding in Java
There are
many rules if we talk about method overriding with exception handling. The
Rules are as follows:
|
JAVA CUSTOM EXCEPTION
If you are creating your own Exception that is known as custom exception or user-defined exception. Java custom exceptions are used to customize the exception according to user needs. With the help of custom exception, you can have your own exception and message
No comments:
Post a Comment