An Error “indicates serious problems that a reasonable application should not try to catch.”
An Exception “indicates conditions that a reasonable application might want to catch.”
Error along with
RuntimeException & their subclasses are
unchecked exceptions. All other Exception classes are
Checked exceptions are generally those from which a program can recover & it might be a good idea to recover from such exceptions programmatically. Examples include
ParseException, etc. A programmer is expected to check for these exceptions by using the try-catch block or throw it back to the caller
On the other hand we have unchecked exceptions. These are those exceptions that might not happen if everything is in order, but they do occur. Examples include
ClassCastException, etc. Many applications will use
throws clause for
RuntimeExceptions & their subclasses but from the language perspective it is not required to do so. Do note that recovery from a
RuntimeException is generally possible but the guys who designed the class/exception deemed it unnecessary for the end programmer to check for such exceptions.
Errors are also unchecked exception & the programmer is not required to do anything with these. In fact it is a bad idea to use a
try-catch clause for Errors. Most often, recovery from an Error is not possible & the program should be allowed to terminate. Examples include
Do note that although Errors are unchecked exceptions, we shouldn’t try to deal with them, but it is ok to deal with
RuntimeExceptions(also unchecked exceptions) in code. Checked exceptions should be handled by the code.