2010-11-30 8 views
4

私はこのエラーの考えを理解しています。しかし、私はこれがコールスタックの仕組みを理解していないと思います。Java例外:例外myExceptionは、対応するtryステートメントの本体でスローされません

ファイルMain.java:

public static void main(String[] args) { 
    try { 
     Function1(); 
     } catch (myException e) { 
     System.out.println(e.getMessage()); 
    } 
} 
public static void Function1() { 
    Function2(); 
} 

機能2は、別のファイルに存在:

File2.java

public void Function2() throws myException { 
    .... 
} 

だから、いくつかのコール(コールスタックダウン)を介して、私は機能2を持っています「throws myException」という要件を指定します。どのようにメイン関数(エラーがどこに向けられている)は、私が行の下でmyExceptionをスローすることを認識しませんか?

私の「例外知識」の「穴」がどこにあるのかについての指針は、非常に高く評価されます。

aitee、

+0

if myExceptionランタイム例外? Function2がmyExceptionをスローする必要がある場合、Function1もそれをスローする必要があります。 – hvgotcodes

+0

MainとFile2のクラスの関係は何ですか? (どちらから継承していますか?) –

+0

これはあなたの質問には直接関係しませんが、命名規則に従うことを強くお勧めします: 'Function1'や' Function2'のようなメソッドは小文字で始まり、 'myException'は大文字で始まります。規約により、あなたと他のプログラマーはお互いのコードをよく理解することができます。 –

答えて

1

穴がFunction2は、それが例外をスローすることを宣言しますが、Function1ないということです。 Javaは可能な呼び出し階層を掘り下げるわけではありませんが、throwsステートメントで宣言することによって直接実行されます。

Function1myExceptionRuntimeExceptionなので、スローを宣言していない可能性があります。

+0

私はスローのチェーンを宣言する必要があると言っています。 – aitee

+0

それはそれを修正しました...ありがとうございました。だから、ハンドラからスローへのパス(コールスタックの下)は、途中の各関数がハンドラに至るまで "スロー"(またはスローを渡す)できるという要件を持っていなければなりません。 – aitee

1

Function1()は、それがthrows myExceptionであることを宣言していません。つまり、2つのコンパイルエラーが発生することになります。つまり、キャッチされていないか宣言されていない例外と宣言されていない例外をキャッチします。

+0

'myException'が' RuntimeException'であるため、 'throws 'が見つからないというエラーはありません。 –

+1

RuntimeExceptionだった場合、最初のエラーは発生しません。 – Darron

関連する問題