0

これらの 2 つの (一見単純な) 文の意味を解釈するのに苦労しています。

「チェック済み例外は、コンパイル時にコンパイラによってチェックされます」

これは何を意味するのでしょうか?すべてのチェック済み例外 (コードでスローされる) がキャッチされているかどうかをコンパイラがチェックすることは?

「チェックされていない例外は、コンパイル時ではなく実行時にチェックされます」

この文で「checked」とはどういう意味ですか? チェックされていない例外が実行時にスローされただけだと思いましたか?

4

4 に答える 4

1
  • コンパイル時

次の 2 種類があります。

  1. チェック済み:メソッドが必要な例外にスローされたかどうかを意味します
  2. 未処理のチェック済み例外: メソッドが必要な例外をスローしなかった場合、コンパイル エラーが発生します。

    • 実行時

Called Unchecked Exceptionは実行時に発生し、明示的に処理する必要はありません。 RuntimeExceptionとそのサブクラス、または Error とそのサブクラスはすべてUncheckedに分類されます。

于 2013-07-02T22:34:58.627 に答える
1

私の意見では、2 番目のステートメントは正しくありません。または、正しい場合は、最初の文で意味するものとは異なる意味で「checked」を使用しています。そして、それは誤解を招きやすく、役に立たないことです。

これらの文のコンテキスト (およびソース) を提供していただければ、別の方法で説得できるかもしれません。


チェックされていない例外が実行時にスローされただけだと思いましたか?

それらはまた、実行時にキャッチされる(可能性がある)...そしておそらくそれが引用の意味です。しかし、それが意味するものである場合、それは「チェック」の通常の意味をねじ曲げています...「誤解を招き、役に立たない」についての前のメモを参照してください。

于 2013-07-02T22:42:26.307 に答える
0

次のように読むとわかりやすいかもしれません。

「チェックされた例外は、コンパイル時にコンパイラによって (一致する try/catch があるかどうかを確認するためにテストされます)」 - そうでない場合、コードはコンパイルされません

「チェックされていない例外は、コンパイル時ではなく実行時に (一致する try/catch があるかどうかを確認するためにテストされます)」 - そうでない場合、コードはクラッシュします

于 2013-07-02T22:52:56.157 に答える
-1

未チェックの例外がチェックされている部分が本当に誤解を招くことに同意します。より適切な解釈は、すべての Java スロー可能オブジェクトを次の 3 つのカテゴリに分類することです。

  • チェックされた例外
  • ランタイム例外
  • エラー

個人的には、チェック済み例外をコード内でキャッチすることが義務付けられているものと考え、ランタイム例外をキャッチするオプションとして考えることを好みます。両方を処理できますが (ログなど)、チェックされたものからのみ回復を試みる必要があります。

チェック例外は、多くの冗長な catch 句を導入する傾向があります。場合によっては、Checked 例外をキャッチし、それを Unchecked 例外でラップして、さらに伝播することが理にかなっている場合があります。

効果的な Java の項目 41:チェック済み例外の不必要な使用を避けることを常に念頭に置いてください。言い換えれば、呼び出し元が回復できない可能性がある条件、またはプログラムが終了することが予測可能な唯一の応答である条件に対しては、チェック済み例外を使用しないでください

于 2013-07-02T22:40:06.660 に答える