ExceptionとRuntimeExceptionの違いを説明します。
Exceptionクラスの下に、RuntimeExceptionクラスがあります。
つまり、、
Exceptionクラス
∟RuntimeExceptionクラス
です。
そして、RuntimeExceptionクラスの例外のことを、
非検査例外(非チェック例外)と言いいます。
個人的には非チェック例外という言い方が好きなのですが、
何が非チェック = チェックされないのでしょうか?
それは、コンパイル時にその例外が発生するかどうかは、
チェックされませんよ。ということです。
別の言い方をすれば、コンパイル時に、
その例外を処理するコードが書かれているかどうかは、
チェックされませんよ。ということ。
例えば、RuntimeExceptionクラスを投げるメソッドを定義します。
(例: void test() throws RuntimeException{})
そのメソッドを呼び出すとき、例外処理をしなくても、
コンパイルエラーになりません。
(例:x.test() だけでもOK!)
通常のExceptionクラスを投げるメソッドを呼び出すとき、
(例: void test() throws Exception{})
try~catchなどで例外処理をしないとコンパイルエラーになります。
(例: try{ x.test() } catch (Exception e) {} など)
これが検査例外と非検査例外の大きな違いの1つです。