2017-05-08 18 views
-2
public class TestExceptions extends Exception { 
    public static void main(String[] args) 
    { 
     String test = "no"; 
     try { 
      System.out.println("start try"); 
      doRisky("no"); 
      System.out.println("end try"); 
     } catch(ScaryException se) { 
      System.out.println("scaryexception"); 
     } finally { 
      System.out.println("finally") ; 
     } 

     System.out.println("end of main"); 
    } 
    static void doRisky(String test) throws ScaryException { 
     System.out.println("start risky"); 
     if ("yes".equals(test)) { 
      throw new ScaryException(); 
     } 
     System.out.println("end risky"); 
     return; 
    } 
} 

このコードは機能しません。エラー:シンボルを見つけることができません。これはHead First Java Bookの例です。Javaで独自の例外を作成する

クラスの名前をTestExceptionsからScaryExceptionとして変更すると、正常に動作しています。それはなぜそうですか? カスタマイズ例外の場合に投げている例外と同じクラス名を持つ必要がありますか?

+1

はい、必要です。 'TestExceptions'を使いたい場合は、この行を' throw new TestException(); ' –

+1

に変更してください:*** ScaryException ***はあなたのJDKにありますか? –

+0

クラスの定義と使用する場所に同じ名前を使用する必要があります。これは特別な例外ではありません。これはプログラミングの基本です – Jens

答えて

1

ScaryException.java

public class ScaryException extends Exception { 

     public ScaryException(String exceptionMsg){  
      System.out.println("in ScrayException: " +exceptionMsg); 
     } 
    } 

Main.java

public class Main { 

    public static void main(String[] args) { 
    String test = "no"; 
    try { 
     System.out.println("start try"); 
     doRisky("yes"); 
     System.out.println("end try"); 
     } 
    catch(ScaryException se) {   
     System.out.println("in catch"); 
     } 
    finally { 
     System.out.println("finally") ; 
     } 
    System.out.println("end of main"); 

    } 

    static void doRisky(String test) throws ScaryException { 
     System.out.println("start risky"); 
     if ("yes".equals(test)) { 
      throw new ScaryException("Scary Exception thrown from doRisky"); 
      } 
     System.out.println("end risky"); 
     return; 
} 

} 

はこの一例であってよいが、あなたのためにそれを明確になるだろう。

はい、カスタム例外クラスとjavaファイルの名前は同じである必要があります。 Exceptionを書くことによって、カスタム例外が作成されます。したがって、あなたの例では、TestExceptionsを作成していましたが、存在しないScaryExceptionsをスローしようとしました。

0

たちは

ははい、それは必要なカスタマイズの例外の場合 投げていることが必要な例外と同じクラス名を持つことです。

あなたがTestExceptionを使用したい場合は、throw new TestException();

この行を変更するあなたはJava Custom Exception

0

からより多くの例を得ることができ、あなたの仮定が正しいようです。追加しなかったScaryExceptionという別のExceptionクラスがあるか、TestExceptionsではなくScaryExceptionである必要があります。 TestExceptionsはExceptionを拡張しているので、後者が例外になります。

関連する問題