16

私は多くの計算を行う科学的ソフトウェアを構築していますが、もちろん引数の長さが間違っている可能性があります...そのIllegalArgumentExceptionため、問題の正しい名前と思われるクラスを使用throws IllegalArgumentExceptionしましたが、関数定義に配置する必要がありますか?

私がこれを書いた後、Eclipse エディターは関数を try と catch で囲むように求めなかったので、私はこれを求めています。これがtryとcatchの強制方法だと思いました。Java.com の例外処理チュートリアルを読みましたが、質問に関する部分を正しく理解しているかどうかはわかりません。

4

5 に答える 5

22

RuntimeExceptionlikeは、プログラミング エラーIllegalArgumentExceptionを示すために使用されます。プログラム自体がそれを処理できることはめったにありません。誰かが手動でコードを修正する必要があります。

潜在的なs は、明示的な を使用するか、入力を記述しながらRuntimeException、関数契約 (つまり、javadoc) で何らかの方法で文書化する必要があります。@throws関数の javadoc がない場合は、関数を使用する際の潜在的な落とし穴を文書化するためだけに throws 句を追加することをお勧めしますが、一般に、実行時例外に throws 句を追加することは推奨されません。

間違った長さを指定することが実際にはプログラミング エラーではなく、例外状況である場合は、新しいチェック済み例外 (BadLengthError など) を作成します。例外的な状況でない場合は、フロー制御に例外を使用しないでください。

于 2011-03-14T22:13:32.360 に答える
4

例外には次の 2 種類があります。

実行時例外 (たとえば、IllegalArgumentException や NullPointerException など) は、「発生してはならない」ため、明示的にキャッチする必要はありません。もちろん、そうした場合は、どこかでそれらを処理する必要があります。

通常の例外は、本質的に難しい種類のエラーを表すため、キャッチするか、スローするように宣言する必要があります。

于 2011-03-14T20:32:11.473 に答える
2

Unchecked Exceptions - RuntimeException から継承する例外を読む必要があります。メソッド ヘッダーで宣言する必要はありません。

http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html

最後の段落はそれを要約しています:

クライアントが例外から回復することが合理的に期待できる場合は、それをチェック例外にします。クライアントが例外から回復するために何もできない場合は、それを非チェック例外にします。

于 2011-03-14T20:34:18.133 に答える
1

IllegalArgumentException(たとえば、他のいくつかとともにNullPointerException)は、の例ですRuntimeExceptionこのタイプの例外は、チェックされた例外として知られているものではありません。Java では、メソッドがスローするチェック済み例外を宣言する必要があり、呼び出されたメソッドがチェック済み例外をスローする可能性がある場合、呼び出し元のメソッドは例外自体をスローすることを宣言するか、それをキャッチして処理する必要があります。

そのため、私の具体的な推奨事項は、いいえ、宣言しないことです。確かに、しかし、あなたはそれを捕まえたくない. ほとんどの場合、これが予期しない動作でない限り、スローしたくないでしょう。メソッドが好きではない値を取得することが非常に正常で合理的である場合、例外はそれを処理するための間違った方法です。

また、アサーションの使用を検討することもできます。

于 2011-03-14T20:33:22.130 に答える
1

例外を理解する際の最初のポイントは、それらが例外的な状況のためのものであるということです。メソッドについて考えるとき、「例外的な値が渡された場合、このメソッドは例外をスローする必要がありますか?」と自問する必要があります。答えが「はい」の場合は、メソッド宣言に入れます。あなたがその考えを理解できるかどうかはわかりませんが、それはちょっと簡単です。それはただの練習問題です。

于 2011-03-14T20:34:03.187 に答える