2009-07-24 29 views
1

は、私は二つの方法Javaの例外処理 - カスタム例外

public void ExceptionTest() throws Exception { 
    throw new FileNotFoundException(); 
} 


public void ApplicationExceptionTest() throws MyOwnException { 
    throw new FileNotFoundException(); 
} 

Eclipseは第二の方法「未処理の文句を持って

私のクラスに続いて、この

public class MyOwnException extends Exception { 

} 

などのカスタム例外を持っています例外タイプFileNotFoundException '私はMyOwnExceptionがExceptionを延期して以来、それが不平を言わなければならないと思った...

私はここに何が欠けているのか教えてもらえますか?

+7

メソッド名のJava規約では、小文字で始める必要があります。例えばExceptionTestではなくexceptionTest。 –

答えて

3

あなたの方法は、それがMyOwnExceptionをスローすることを宣言しますが、FileNotFoundExceptionMyOwnExceptionではありません。どちらもサブクラスExceptionが、最終的に彼らがとそれぞれ関連していることを意味するわけではありません。

例外クラスまたはスーパークラスがthrows節に明示的にリストされている場合のみ、チェック例外をスローできます。 MyOwnExceptionFileNotFoundExceptionのスーパークラスではありません。

なぜこれをやりたいですか?

9

拡張ツリー

  • 例外
    • にIOException
      • にFileNotFoundException
    • MyOwnException

FileNotFoundとMyOwnはお互いを知りませんでした。

public void ApplicationExceptionTest() throws Exception 
{ 
throw new FileNotFoundException(); 
} 

コメント移動するための方法である:私は、これはモックアップ試験のためだけではなく、あなたの通常のソースコードで使用するためのWntクラスを実装するためであると思います

を!

+2

+1は、クラス階層を表示します。 @thomas_dsあなたはEclipseを持っていると述べたので、このツリーはMyOwnExceptionを右クリックし、 "Open Type Hierarchy"またはF4を選択すると表示されます。この場合、ExceptionとIOExceptionの両方には他の多くのサブクラスがあります。 – MatrixFrog

2

あなたは、ApplicationExceptionTestがMyOwnExceptionをスローすると言っています。 MyOwnExceptionはExceptionを拡張しますが、FileNotFoundExceptionはMyOwnExceptionを拡張しないため、ここでは無関係です。

場合によっては、例外を "Shape"、FileNotFoundExceptionを "Square"、MyOwnExceptionを "Circle"に置き換えてみてください。あなたはサークルを投げると言っていますが、あなたは実際にスクエアを投げています。両方が形であることは重要ではありません。

(名前付け規則はJavaにとって非常に非典型的です.Javaでは、メソッドは通常、小文字で始まります。)

1

Javaのチェック例外は一般にという悪い考えです。これはあまりにも頻繁に「例外スパゲッティ」につながるためです。現代のフレームワークのほとんどはチェック例外を使用しません。実際、それらのほとんどはチェックされていない例外で既存のレガシーチェック例外をラップします。