Exception and its subclasses are a form of
Throwable that indicates conditions that a reasonable
application might want to catch.
Exception and any subclasses that are not also
RuntimeException are checked
exceptions. Checked exceptions need to be declared in a
method or constructor's
throws clause if they can be thrown
by the execution of the method or constructor and propagate outside
the method or constructor boundary.
@jls 11.2 Compile-Time Checking of Exceptions