RuntimeExceptionを正確に使用する必要がある場所を追跡できません
それはおそらくあなたが議論を見ているからです、すなわち人々はまさにこの点について意見が分かれています。
また、通常の例外およびそのサブクラスとの違い。
非常に単純:のすべてのサブクラス(およびそのサブクラスException
を除く)がチェックされます。つまり、コンパイラーは、キャッチしたコードを拒否するか、メソッドシグネチャで宣言します。ただし、のサブクラスはチェックされていません。RuntimeException
RuntimeException
グーグルは私に複雑な答えを与えました。つまり、プログラミングロジックエラーを処理するために使用する必要があり、switch-case構造のデフォルトブロックなど、通常は例外が発生しない場合にスローする必要があります。
これは従来の知識であり、プログラムが有効に処理できるすべてのものについて、チェックされた例外を使用する必要があります。そうすると、コンパイラが例外を処理するように強制するからです。逆に、プログラムは通常、プログラマーのエラーをうまく処理できないため、チェックする必要はありません。これは、Java標準APIが使用する方法RuntimeException
です。
あなたがリンクした議論は、チェックされた例外が悪いコードにつながるので使用されるべきではないと考える何人かの人々(これは私を含む)の見解によって引き起こされます。コンパイラで例外チェックを無効にすることはできないため、これを行う唯一の方法は、とそのサブクラスのみを使用することです。 RuntimeException
IMOがこの見解をサポートしているという1つの観察は、「プログラマーエラーにのみ未チェックの例外を使用する」という従来の知識は、実際には主に逆推論の合理化であるということです。コンパイラーがプログラマーに対処するように強制してはならないコードの安全性の理由はありません。エラー。ただし、のようなものはほとんどどこNullPointerException
にArrayIndexOutOfBoundsException
でも出現する可能性があり、それらをチェックした場合、誰もJavaでプログラミングしたいとは思わないでしょう。したがって、言語設計者は、それらの例外を作成し、チェックを外さなければなりませんでした。これを説明するために、彼らは「チェックされていない例外はプログラマーのエラーのためのものです」という話を思いついた。