2012-04-27 11 views
2

例外処理の場合のJava標準に関するクエリが1つあります。Javaコーディング標準による例外処理

コードスニペット:この場合、

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に言及しています:他の例外が発生する可能性があるとは思わないかもしれませんが、実行時間。 例外はすべての例外の親クラスであるため、ケース2が好ましいですか? はいの場合、case1は実行可能ですか? あなたのパフォーマンスポイントも私に説明していただけますか?

+1

例外をスローするときは、常に明示的に指定してください。 – rid

答えて

2

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

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

1

両方の例外はRuntimeExceptionサブクラスです。メソッド宣言のthrows部分に明示的に宣言する必要はありません。

Javaでは、例外の種類はchecked and uncheckedです。リンクで説明されているように、それぞれ異なる状況で使用されます。 RuntimeExceptionのサブクラスであるすべての例外はチェックされていない例外です。一般に、メソッドが例外をスローすると宣言してはなりません。最終的なプログラムが実行時に処理する方法を知っておくべきことを例外とは対照的に、

+0

あなたはあなたが*いるとは思っていないのではありません。あなたのコードに明示的にスローした場合、それらを宣言することはまだ有用な情報です。 –

1

は通常、IllegalArgumentExceptionArrayIndexOutOfBoundsExceptionなどのRuntimeException sが、プログラマエラーを反映しています。

一般的に、このような例外に適切に対応するには、たいていは投げてしまうので、プログラムを実行しているプログラマーは修正が必要なバグスタックトレースRuntimeExceptionをキャッチするtry/catchと書くのは良い考えではないので、何の意味もありません。

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

1

私はあなたが例外をスローしてはいけないと思うのですが、代わりにそれをJavaのdocコメントに入れてください。このようにして、あなたのAPIのユーザは、どんな種類の例外が起こる可能性があり、それらの例外を捕らえることを余儀なくされるのかを認識しています。

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

例外をキャッチするために強制的に、ほとんどの場合は文句を言わないくらい役立つように私は、チェック例外の上にランタイム例外を好みます。だから、javaのドキュメントにすべての例外を置くことも、それを捕まえる力がないことを明確にします。このように、コードはより洗練されており、デフォルトで例外が上位層に伝播する可能性があります。そうでなければ、多くの開発者がチェック例外をキャッチして、何もしません。最下位レイヤは、下位レイヤで発生する例外を認識しません。

ルールの一般的な親指は「ユーザーが例外から例外をスローすると例外がスローされました」と表示されます。