QA@IT

[Java] Exception と RuntimeException の違い

2739 PV

Exceptionのサブクラス例外をthrowする場合はtry~catchが必須になりますが、RuntimeExceptionのサブクラス例外をthrowする場合はtry~catchを求められません。

利用時の使い分けは(多分)理解しているのですが、この違いは、どのような実装で差が付けられているのでしょうか?
JDKのソースコードで判別出来るのでしょうか。それともJavaVM側のソースコードを見なければ分からないのでしょうか。
JDKのException.javaとRuntimeException.javaのソースを見ましたが、それらしき実装の差は無いように見えました。

回答

検査例外、非検査例外はコンパイル時のものです(言語仕様 11.2 あたり)ので、ソース見るならjavacのソースになるかと思います。

例えば以下の errorUncaught
jdk8u/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java#l814 - rev:0caab0d65a04

"unreported.exception.need.to.catch.or.throw"
というのが出てきますが、これが

jdk8u/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties - rev:0caab0d65a04

で、unreported exception {0}; must be caught or declared to be thrown

と定義されています。

編集 履歴 (0)
  • ありがとうございます!
    自分で考えていたらずっと解決出来ていなかったと思います。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。