Sunday, May 9, 2021

Exception Handling (Experience in java)

 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

The core advantage of exception handling is to maintain the normal flow of the application. Exception normally disrupts the normal flow of the application that is why we use exception handling. Let's take a scenario:
  1. statement 1;  
  2. statement 2
  3. statement 3
  4. statement 4;
  5. statement 5; //exception occurs  
  6. statement 6;
  7. statement 7;
  8. statement 8;
  9. statement 9;
  10. 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:

  1. Checked Exception
  2. Unchecked Exception
  3. 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.
Output:

Exception in thread main java.lang.ArithmeticException:/ by zero rest of the code...

Now, as displayed in the above example, the rest of the code is executed i.e. rest of the code... statement is printed.

Internal working of java try-catch block



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.
public void method()throws IOException,SQLException.

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.     }  

 Difference between final, finally and finalize

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:

  • If the superclass method does not declare an exception
    • If the superclass method does not declare an exception, subclass overridden the method cannot declare the checked exception but it can declare unchecked exception.
  • If the superclass method declares an exception
    • If the superclass method declares an exception, subclass overridden method can declare same, subclass exception or no exception but cannot declare parent exception.

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:

INTRODUCTION TO COMPUTER NETWORKS

A Computer network consists of two or more autonomous computers that are linked (connected) together in order to: • Share resources (files...