Errors should not be caught or handled (except in the rarest of cases). Exceptions are the bread and butter of exception handling. The Javadoc explains it well:
An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions.
Look at a few of the subclasses of Error
, taking some of their JavaDoc comments:
AnnotationFormatError
- Thrown when the annotation parser attempts to read an annotation from a class file and determines that the annotation is malformed.AssertionError
- Thrown to indicate that an assertion has failed.LinkageError
- Subclasses of LinkageError indicate that a class has some dependency on another class; however, the latter class has incompatibly changed after the compilation of the former class. VirtualMachineError
- Thrown to indicate that the Java Virtual Machine is broken or has run out of resources necessary for it to continue operating. There are really three important subcategories of Throwable
:
Error
- Something severe enough has gone wrong the most applications should crash rather than try to handle the problem,RuntimeException
) - Very often a programming error such as a NullPointerException
or an illegal argument. Applications can sometimes handle or recover from this Throwable
category -- or at least catch it at the Thread's run()
method, log the complaint, and continue running.FileNotFoundException
and TimeoutException
...This slide showing Java's exception hierarchy by @georgios-gousios concisely explains the differences between Errors and Exceptions in Java.
Errors tend to signal the end of your application as you know it. It typically cannot be recovered from and should cause your VM to exit. Catching them should not be done except to possibly log or display and appropriate message before exiting.
Example: OutOfMemoryError - Not much you can do as your program can no longer run.
Exceptions are often recoverable and even when not, they generally just mean an attempted operation failed, but your program can still carry on.
Example: IllegalArgumentException - Passed invalid data to a method so that method call failed, but it does not affect future operations.
These are simplistic examples, and there is another wealth of information on just Exceptions alone.
Errors -
Error
s in java are of type java.lang.Error
. Error
s happen at run time. They will not be known to compiler. Error
s are mostly caused by the environment in which application is running. java.lang.StackOverflowError
, java.lang.OutOfMemoryError
Exceptions -
Exception
s in java are of type java.lang.Exception
.Exception
s include both checked as well as unchecked type.try-catch
blocks.Exception
s are mainly caused by the application itself.SQLException
, IOException
ArrayIndexOutOfBoundException
, ClassCastException
, NullPointerException
further reading : http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/
Sun puts it best:
An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch.
The description of the Error
class is quite clear:
An
Error
is a subclass ofThrowable
that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions. TheThreadDeath
error, though a "normal" condition, is also a subclass ofError
because most applications should not try to catch it.A method is not required to declare in its throws clause any subclasses of
Error
that might be thrown during the execution of the method but not caught, since these errors are abnormal conditions that should never occur.
Cited from Java's own documentation of the class Error
.
In short, you should not catch Error
s, except you have a good reason to do so. (For example to prevent your implementation of web server to crash if a servlet runs out of memory or something like that.)
An Exception
, on the other hand, is just a normal exception as in any other modern language. You will find a detailed description in the Java API documentation or any online or offline resource.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With