Its always better to handle an exception in java program.Exception
will interrupt the program flow and affect robustness of program.Once
exception occurs it will stop the further execution. So better handle
exception and dont scared users by not handling exceptions:p Please go
through below for exceptions and also refer other sites too.
What is an Exception?
*************************
It’s
a non functional requirement for any application, to gracefully handle
any erroneous condition like resource not available, invalid input, null
input, index not available and so on.Java Exception are divided into
two categories as checked Exception and unchecked exception.
Checked Exception: Exception that can be identified during compile time. Basically Exception will throw compilation error.
UnChecked Exception:
Exception which can't be predicted during compile time is unchecked
exception. Unchecked exception is the exception which will occur during
runtime.
Unchecked Exceptions mostly arise due to programming
errors like accessing method of a null object, accessing element outside
an array bonding or invoking method with illegal arguments. Unchecked
exceptions are the direct subclass of RuntimeException.
Errors:Errors
are serious runtime environment problems that are almost certainly not
recoverable. Some examples are OutOfMemoryError, LinkageError, and
StackOverflowError. They generally crash you program or part of program.
Only a good logging practice will help you in determining the exact
causes of errors.
Implementation of Exception:
******************************
Checked
exceptions can be handled by throws keyword. Throws will be declared on
the method. Throws will not be used inside of any method. Checked
exceptions such as IOException, Sql Exception can be throwed by throws.
Throws can be able to throw more than one exception at a time using
comma operator. syntax are as folows.
---------------------------------------------------------------------------------------
public static void main(String[] args) throws IOException,SQLException{
// body of function
}
---------------------------------------------------------------------------------------
Unchecked
exceptions can be handle by try catch block. Block of code which may
throw exceptions during runtime will be declared inside try block.Try
block could state that code which is there inside of me may or may not
throw exception. If its standard exception such as Nullpointer
exception, Indexoutofexception etc then compiler will throw an
exception. If its custom exception then programmer has to throw that
exception explicitly.For Example, you want to throw an exception of
below age if age is less than 18.This is custom exception and not
standard exception.
-------------------------------------------------------------
public void method1()
{
String[] firstName= new firstName[2] ;
int age;
// getting input of age and first name here
try{
if(age is < 18)
{
throw new outOfAgeException("Below age");
}
System.Out.println(firstName[2]);
} System.out.println(null);
}
-------------------------------------------------------------
In
the above example custom exception is "below age" and standard
exception is " IndexoutofException". Exception will be handled for the
codes is there inside the try block.So null pointer will not be able
handle but it will be thrown. Catch block will be used for handling an
exceptions. More than one catch block can also be declared. If you are
declaring more than one catch block for handling an exceptions then it
should be in an order of specific to generic. Suppose you are declaring
catch for Arrayindexoutofexception and exception. Then catch block with
arrayindexbound should come first and catch block with General exception
should come next.Lets see what will happen if we declared general
exception first. If we declare catch block with general exception first,
then all exceptions will be caught by catch block with general
exception. Even arrayindexbound exception will also be caught by catch
block with general exception and it cant be catch by catch block with
arrayindexbound exception. Here is an Example.
------------------------------------------------
catch(arrayindexboundException arr)
{ LOGGER.error("Checkout your array index", arr);
} catch(Exception e)
{
LOGGER.error("Some information", e);
}
------------------------------------------------
Stacktrace:
Stackrace is use to find root cause of an exception. Once function is
called its reference will be saved in stack. If that function throws any
exception then pointer of stack will go back to find the root cause of
an exception.Mainly stacktrace will be useful debugging and tracing your
code.
Tips for handling an Exception:
*****************************************
1)
Always use Finally block if you are handling an exception. There some
situations where we need to close database connection, file connection
etc. Such statements can be written in finally block. Once exception is
occurred, your application will be stopped abtruptly but statements
which has been declared inside finally block will be executed.Code
inside the finally block will be executed though exceptions are thrown
or not.Always clean up after handling the exception.
2)In catch block don't do return null. In that case, exception could be swallowed and stacktrace couldn't find root cause.
-----------------------------------------
catch (NoSuchMethodException e) {
return null;
}
-----------------------------------------
3)
use always standard exception so that other programmers can also
understand about that exception. If you are using custom exceptions then
document all exceptions in your application in javadoc
4) Don't throw any exceptions from finally block.
5)Validate user input to catch adverse conditions very early in request processing.
6)Always include all information about an exception in single log message.
-----------------------------------------
LOGGER.debug(“Using cache sector A”);
LOGGER.debug(“Using retry sector B”);
-----------------------------------------
Don’t do this.
Happy Learning !!