Checked versus Unchecked Exceptions

Checked versus Unchecked Exceptions


There is a religious debate on checked or unchecked exception. Some programmers prefer checked exception, while others prefer the other.

In a nutshell, they have their own prons and crons, we need understand in which case one is more appropriate, and choose the one that best fits current situation.

There are three kinds of throwables in java checked exceptions, runtime exceptions, and errors.

1.         A checked exception is any subclass of Exception (or Exception itself), excluding class RuntimeException and its subclasses. Unchecked exceptions are RuntimeException and any of its subclasses. Class Error and its subclasses also are unchecked.
2.         A Checked exception must be explicitly caught or propagated (rethrown). An unchecked exceptions does not have this requirement. It doesn't have to be caught or declared thrown.
Effective Java
Use checked exceptions for conditions from which the caller can reasonably be expected to recover.
Use runtime exceptions to indicate programming errors.
Errors are reserved for use by the JVM to indicate resource deficiencies, invariant failures, or other conditions that make it impossible to continue execution. It’s best not to implement any new Error subclasses.

Checked Exceptions
Pros of Checked Exceptions:
Compiler enforced catching or propagation of checked exceptions make it harder to forget handling that exception.
Crons of Checked Exceptions:
Versioning: Checked exceptions thrown become part of a method interface and makes it harder to add or remove exceptions from the method in later versions.
Unchecked Exceptions
Pros of Unchecked Exceptions:
1.         Unchecked exceptions do not clutter the code with unnecessary try-catch blocks.
2.         Unchecked exceptions do not clutter the method declarations with aggregated exception declarations.
3.         Unchecked exceptions avoids versioning problems altogether.
Crons of Unchecked Exceptions:
Unchecked exceptions make it easier to forget handling errors since the compiler doesn't force the developer to catch or propagate exceptions
Fixes:
This can be fixed by following good programming practice to document all checked and unchecked exception in Javadoc.



When design a method signature, we should only throw appropriate exception by translating exception to a specific checked (or unchecked) exception. This can avoid proliferation of exception.

Resources:
What are the pros and cons of checked exception?
Effective Java (2nd Edition)
Why doesn't C# have exception specifications?
The Trouble with Checked Exceptions
http://download.oracle.com/javase/tutorial/essential/exceptions/index.html
Post a Comment

Labels

Java (159) Lucene-Solr (110) Interview (61) All (58) J2SE (53) Algorithm (45) Soft Skills (36) Eclipse (34) Code Example (31) Linux (24) JavaScript (23) Spring (22) Windows (22) Web Development (20) Nutch2 (18) Tools (18) Bugs (17) Debug (15) Defects (14) Text Mining (14) J2EE (13) Network (13) PowerShell (11) Troubleshooting (11) Chrome (9) Design (9) How to (9) Learning code (9) Performance (9) UIMA (9) html (9) Http Client (8) Maven (8) Problem Solving (8) Security (8) bat (8) blogger (8) Big Data (7) Continuous Integration (7) Google (7) Guava (7) JSON (7) ANT (6) Coding Skills (6) Database (6) Scala (6) Shell (6) css (6) Algorithm Series (5) Cache (5) Dynamic Languages (5) IDE (5) Lesson Learned (5) Programmer Skills (5) Tips (5) adsense (5) xml (5) AIX (4) Code Quality (4) GAE (4) Git (4) Good Programming Practices (4) Jackson (4) Memory Usage (4) Miscs (4) OpenNLP (4) Project Managment (4) Spark (4) System Design (4) Testing (4) ads (4) regular-expression (4) Android (3) Apache Spark (3) Become a Better You (3) Concurrency (3) Eclipse RCP (3) English (3) Happy Hacking (3) IBM (3) J2SE Knowledge Series (3) JAX-RS (3) Jetty (3) Restful Web Service (3) Script (3) regex (3) seo (3) .Net (2) Android Studio (2) Apache (2) Apache Procrun (2) Architecture (2) Batch (2) Bit Operation (2) Build (2) Building Scalable Web Sites (2) C# (2) C/C++ (2) CSV (2) Career (2) Cassandra (2) Distributed (2) Fiddler (2) Firefox (2) Google Drive (2) Gson (2) How to Interview (2) Html Parser (2) Http (2) Image Tools (2) JQuery (2) Jersey (2) LDAP (2) Life (2) Logging (2) Python (2) Software Issues (2) Storage (2) Text Search (2) xml parser (2) AOP (1) Application Design (1) AspectJ (1) Chrome DevTools (1) Cloud (1) Codility (1) Data Mining (1) Data Structure (1) ExceptionUtils (1) Exif (1) Feature Request (1) FindBugs (1) Greasemonkey (1) HTML5 (1) Httpd (1) I18N (1) IBM Java Thread Dump Analyzer (1) JDK Source Code (1) JDK8 (1) JMX (1) Lazy Developer (1) Mac (1) Machine Learning (1) Mobile (1) My Plan for 2010 (1) Netbeans (1) Notes (1) Operating System (1) Perl (1) Problems (1) Product Architecture (1) Programming Life (1) Quality (1) Redhat (1) Redis (1) Review (1) RxJava (1) Solutions logs (1) Team Management (1) Thread Dump Analyzer (1) Visualization (1) boilerpipe (1) htm (1) ongoing (1) procrun (1) rss (1)

Popular Posts