4

私はこのエラーの考え方を理解しています。しかし、これがコールスタックでどのように機能するのか理解できないと思います。

ファイル Main.java:

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

Function2 は別のファイルに存在します:

File2.java

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

したがって、いくつかの呼び出し (呼び出しスタックの下) を通じて、「myException をスローする」という要件を指定する Function2 があります。メイン関数 (エラーが向けられている場所) が、myException をスローしたことを認識しないのはなぜですか?

私の「例外知識」の「穴」がどこにあるかについてのガイダンスは大歓迎です。

あいてぃ

4

2 に答える 2

1

穴はFunction2、例外をスローすることを宣言しているが、スローしてFunction1いないことです。Java は可能な呼び出し階層を掘り下げるのではなく、throwsステートメントで宣言した内容を直接調べます。

Function1おそらくmyExceptionが a であるため、スローを宣言しないで済みRuntimeExceptionます。

于 2010-11-30T19:31:25.080 に答える
1

あなたの問題は、Function1()それを宣言していないことですthrows myException-つまり、2つのコンパイルエラーが発生する必要があります.1つはキャッチまたは宣言されていない例外に関するもので、もう1つは宣言されていない例外のキャッチに関するものです。

于 2010-11-30T19:32:12.877 に答える