The runtime exception classes (RuntimeException and its subclasses) are
exempted from compile-time checking because, in the judgment of the designers
of the Java programming language, having to declare such exceptions would not
aid significantly in establishing the correctness of programs. Many of the operations and constructs of the Java programming language can result in runtime
exceptions. The information available to a compiler, and the level of analysis the
compiler performs, are usually not sufficient to establish that such run-time exceptions
cannot occur, even though this may be obvious to the programmer. Requiring
such exception classes to be declared would simply be an irritation to
programmers.
For example, certain code might implement a circular data structure that, by
construction, can never involve null references; the programmer can then be
certain that a NullPointerException cannot occur, but it would be difficult for a
compiler to prove it.
exempted from compile-time checking because, in the judgment of the designers
of the Java programming language, having to declare such exceptions would not
aid significantly in establishing the correctness of programs. Many of the operations and constructs of the Java programming language can result in runtime
exceptions. The information available to a compiler, and the level of analysis the
compiler performs, are usually not sufficient to establish that such run-time exceptions
cannot occur, even though this may be obvious to the programmer. Requiring
such exception classes to be declared would simply be an irritation to
programmers.
For example, certain code might implement a circular data structure that, by
construction, can never involve null references; the programmer can then be
certain that a NullPointerException cannot occur, but it would be difficult for a
compiler to prove it.