Introduction to Exceptions in Java

An exception is a divergence from an application’s normal behavior.

Exception in java follow a throw and catch mechanism. 

When something happens that is not expected at a particuler point in the program execution (e.g. not finding a file when trying to read a file), java stops the current execution flow and let us know by throwing an exception object.

We can handle this exception by catching the exception in the same method and try to recover from it, or catch it and rethrow it, or just leave the handling part to the caller of this method. If no one handle the exception, it is finally thrown to JVM and the program halts execution.

Some exceptions can be avoided with proper coding, but some are not within our control, and hence need to be handled.

 

Some advantages of Java's exception handling are:

  • Error handling code is separated from the normal program function and hence it improves the program structure.

  • The programmer can choose where to handle exceptions or whether to handle at all. We can handle this exception by catching the exception in the same method and try to recover from it, or catch it and rethrow it, or just leave the handling part to the caller of this method. 

  • You can create youe own exception specific to your application.

 

Exception Hierarchy

The parent class for all exception related classes is the java.lang.Throwable class. 

Throwable has two children: Exception and Error. 

Exception and all its children are usually recoverrable and hence we can handle them and try to recover from them.

Exception and all its subclasses except RuntimeException are called checked excpetions. Java mandates that we need to handle checked exceptions.

RuntimeException and its subclasses are called unchecked exceptions or runtime exceptions. Handling of Runtime exceptions or unchecked exceptions are optional, and java doesn't mandate it. 

Usually there is nothing much we can do from within our program to recover from an error and hence it is recommended not to try to recover from error within the program. For example, consider the OutOfMemory error. You can’t do much from the program when system's memory is run out; instead you should restart the system or just application and try to optimize the program and system resources to avoid the error from occuring again. 

Any Throwable (Exception, RuntimeException, Error or any of their subclasses) can actually be handled the same way; however, handling checked exception is mandated, handling runtime exception is optional and handling error is not recommended. 

Exception hiararchy can be summarized as below.

 

Checked Exception v/s Runtime Exception

Exception and all its subclasses except RuntimeException are called as checked exceptions. RuntimeException and its subclasses are called unchecked exceptions. Java mandates that we need to handle checked exceptions. Handling of Runtime exceptions or unchecked exceptions are optional.

A checked exception is an exception for which the developer doesn’t have any control over the occurrences with the possibility of recovery. IOException is an example for a checked exception. IOException usually occurs when there is some problem with an IO device and the developer doesn’t have any control on that; but can try workarounds, like retries after waiting for some time. Therefore, the developer must handle it, either explicitly using try-catch block or say that it is being handled elsewhere through the use of throws clause in that method signature. Else program won't compile. 

A runtime exception is an exception that mostly represent a coding mistake. It is called unchecked exception because handling is optional. Instead of handling it, you should actually try to avoid it through better programming. NullPointerException is an example for an unchecked exception. A NullPointerException can be avoided by having proper null checks on variables before accessing them.

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)