3

例外処理の場合の Java 標準に関するクエリが 1 つあります。

コードスニペット:

public String methodXXX(){
//This method may throw IllegalArgumentexception and arrayoutofboundaryException.
}

この場合、どちらが適切なコーディング標準ですか?その理由を教えてください case1:

public String methodXXX() throw IllegalArgumentexception,ArrayoutofBoundaryException.{
//This method may throw IllegalArgumentexception and arrayoutofboundaryException.
}

ケース 2:

public String methodXXX()throws Exception{
//This method may throw IllegalArgumentexception and arrayoutofboundaryException.
}

ここで case2 に言及している理由は次のとおりです。実行時に他の例外が発生する可能性があるとは思わないかもしれません。Exception はすべての例外の親クラスであるため、ケース 2 が推奨されます ??? はいの場合、どのケースでケース1が実行可能ですか? あなたのパフォーマンスポイントも教えてください。

4

4 に答える 4

2

メソッドがスローする特定の例外を宣言する方が常にはるかに優れています。これにより、発生する可能性のある問題が明確になるだけでなく、必要に応じて問題を個別に処理しやすくなります。

パフォーマンスへの影響は実際にはありません。例外のスタック トレースを作成することは、他のすべての考慮事項を小さくするほど高価な操作です。

于 2012-04-27T02:56:39.083 に答える
1

例外をスローするのではなく、java doc コメントに入れる必要があると思います。このようにして、API のユーザーは、発生する可能性のある例外の種類を認識し、それらの例外を強制的にキャプチャする必要はありません。

/**
 * @throws IllegalArgumentexception
 * @throws ArrayoutofBoundaryException
 */
public String methodXXX() {
  //This method may throw IllegalArgumentexception and arrayoutofboundaryException.
}

ほとんどの場合、強制的に例外をキャッチしてもあまり役に立たないため、チェック済みの例外よりもランタイム例外を好みます。したがって、すべての例外をJavaドキュメントに入れると、例外が明確になり、強制的にキャッチすることもありません。このようにして、コードがよりクリーンになり、例外が最上位レイヤーに伝播する可能性がデフォルトで存在します。それ以外の場合、多くの開発者がチェックされた例外をキャッチするだけで何もせず、最上位層が下位層で発生した例外に気付かないままにしているのを見てきました。

ルールの一般的な経験は、「​​ユーザーが例外から回復できる場合は、チェックされた例外をスローし、それ以外の場合はランタイム例外を文書化する」です。それでも、チェック例外は一般的にあまり役に立たないため、後者を好みます。

于 2012-04-27T04:23:50.227 に答える
1

どちらの例外もサブクラスであるため、メソッド宣言RuntimeExceptionの一部で明示的に宣言する必要はありません。throws

Java には、 checked と uncheckedの 2 種類の例外があります。リンクで説明されているように、それぞれが異なる状況で使用されます。のサブクラスであるすべての例外RuntimeExceptionは未チェックの例外であり、一般に、メソッドがそれらをスローすることを宣言することは想定されていません。

于 2012-04-27T02:57:24.803 に答える
1

通常、は、最終的なプログラムが実行時に処理する方法を知っている必要がある例外とは対照的に、プログラマーのエラーRuntimeExceptionと同様IllegalArgumentExceptionArrayIndexOutOfBoundsException反映します。

一般に、明示的にRuntimeExceptions を宣言する価値はありません。そのような例外に対応する適切な方法は、通常はスローすることなので、プログラムを実行しているプログラマーは、修正が必要なバグがあることを認識し、スタック トレースを取得できます。try/catch通常、 aをキャッチする aを書くのは得策ではRuntimeExceptionないので、意味がありません。

他の種類の に関しては、Exceptionスローされる可能性のある特定の例外を宣言して、メソッドのユーザーがそれぞれを個別にキャッチし、特定の例外の種類ごとに異なる応答を記述できるようにする必要があります。スローしていると宣言するだけExceptionでは、メソッドのユーザーは、スローされた特定の例外について何も知らないため、インテリジェントなことは何もできない例外ハンドラーを作成する必要があります。

于 2012-04-27T02:59:02.837 に答える