web-dev-qa-db-ja.com

Oracleで「論争」と呼ばれるチェックされた例外とチェックされていない例外がなぜJavaチュートリアルですか?

私はJavaで初めて 例外に関するドキュメント を読んでいました。特に 未チェックの例外—論争 ページを読んでいました。

一番下の行は言う:

クライアントが例外からの回復が合理的に期待できる場合は、チェック済み例外にします。クライアントが例外から回復するために何もできない場合は、チェックされていない例外にします。

記事がわかりません。 「論争」とは何ですか?簡単な言葉で説明できますか?

10
ABcDexter

最初に例を挙げましょう(しかし、最後に論争の理由となる答えです)。

Javaベースのドキュメントエディタでドキュメントを編集していると仮定します。完了したら、[ファイル]> [名前を付けて保存]を選択し、書き込み権限のないボリュームにドキュメントを保存することを選択します。 Editorは醜いスタックトレースでクラッシュすることはなく、単にファイルを保存できなかったことを通知するだけで、編集を続行したり、別の場所に保存したりできます。

そのような場合、それはおそらくチェックされた例外が予期され、キャッチされ、それから丁寧に回復するように対処されたことです。

一方、これらのゼロ除算、または特定の条件でのみ醜い頭を後回しにするプログラミングエラーによって引き起こされるnullポインター例外を疑います。 RAMが破損している可能性があります。など)コード内のどこでも発生する可能性があります。APIドキュメントでは通知されません "このメソッドは、ゼロによる除算をスローします。 RAMが壊れています "

チェックされた例外は設計の一部である必要があり、そのAPIのユーザーはそれらを処理する準備をする必要があります。未チェックの例外は、ほぼすべての場所で発生する可能性があり、私たちの制御の及ばないものです。

論争は以下から発生しますチェックされていない例外を使用する必要があるときに、チェックされていない例外(RuntimeExceptionからの拡張)を使用するプログラマ:

  • コンパイラーに邪魔されないショートカットとして
  • 署名をシンプルに見せるため
  • チェックされた例外は依存関係の問題であると考えているため(実装するクラスで新しいチェックされた例外をスローする場合は、インターフェイスのシグネチャを変更する必要があります)、その逆も同様です。
3