Forum Stats

  • 3,837,947 Users
  • 2,262,310 Discussions


Checked Exceptions vs RuntimeException

user6368010 Member Posts: 2
edited Jul 1, 2016 12:24AM in Java Desktop Applications


I just read the oracle documentation about Exceptions.

The Catch or Specify Requirement (The Java™ Tutorials > Essential Classes > Exceptions)

The definition for Error is clear, but the definition for the checked Exceptions and RuntimeException are confusing because therorically we can always recover from an Exception.

In doc from Unchecked Exceptions — The Controversy (The Java™ Tutorials > Essential Classes > Exceptions):

"Here's the bottom line guideline: If a client can reasonably be expected to recover from an exception, make it a checked exception. If a client cannot do anything to recover from the exception, make it an unchecked exception."

For example, NumberFormatException is RuntimeException but we often recover from this situation by asking the client to enter a valid number, isn't ?

So, how could we differentiate ?

Thank you


  • Rehan Zahoor
    Rehan Zahoor Member Posts: 20
    edited Jul 1, 2016 12:24AM

    In the above mentioned quote from docs, client means the client programmer, who is using the oracle code in this case. and could be using an API developed by you or a third party. It does not mean the user of the program as you are assuming.

    If you are making an API that can/would be used by client programmers, who may not have direct contact with you (common in opensource/ github projects), the client programmer would look only at the java docs to see what type of exceptions are being generated.

    With checked exceptions the client have to handle exception

    With Unchecked exception the client has an option to handle or leave handling of exception. NumberFormatException would be thrown by Java Runtime. It would propagate to the runtime level. The client programmer may choose to handle this unexpected situation or he may leave it to the Runtime environment.

    Note that exceptions are not a means to control program flow. but a means to handle unexpected situations (alarm client programmer in this case) .

This discussion has been closed.