Исключения Java: исключение myException никогда не генерируется в теле соответствующего оператора try - PullRequest
4 голосов
/ 30 ноября 2010

Я понимаю идею этой ошибки. Но я не понимаю, как это работает в стеке вызовов.

Файл 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 {
     ....
}

Итак, через несколько вызовов (по стеку вызовов) у меня есть Function2, которая определяет требование «throws myException». Почему основная функция (куда направляется ошибка) не распознает, что я выбрасываю myException?

Будем весьма благодарны за любые указания, в которых заключается «дыра» в моем «знании об исключениях».

aitee

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Ваша проблема в том, что Function1() не объявляет, что это throws myException - это означает, что должно быть 2 ошибки компиляции: одна о том, что исключение не было перехвачено или объявлено, и одно о перехвате не объявленного исключения.

1 голос
/ 30 ноября 2010

Дыра в том, что Function2 объявляет, что выдает исключение, а Function1 - нет. Java не пробирается сквозь возможные иерархии вызовов, но идет непосредственно по тому, что вы объявляете в throws инструкциях.

Function1 сходит с рук, не объявляя бросок, вероятно, потому что myException - это RuntimeException.

...