простой вопрос Java: выбрасывать исключение в более позднее предложение catch? - PullRequest
1 голос
/ 20 августа 2010

Если у вас есть:

catch (FooException ex) {
    throw new BarException (ex);
}
catch (BarException ex) {
    System.out.println("hi");
}

... и запускается первое предложение catch (т.е. произошло FooExcepetion), новое BarException сразу же попадает в следующее предложение catch?

Или новое исключение BarException на один уровень вверх по стеку продолжения?

Я понимаю, что это основной вопрос. :)

Ответы [ 2 ]

4 голосов
/ 20 августа 2010

Он не перехватывается вторым предложением catch, №

Каждое предложение catch в списке пробуется, чтобы проверить, соответствует ли оно.Первый, который соответствует, - единственный, который выполняется, затем код переходит к предложению finally.

Другой результат этого заключается в том, что если у вас есть:

try {
    throw SubTypeOfException(...);
} catch(Exception e) {
    ... block 1 ...
} catch(SubTypeOfException e) {
    ... block 2 ...
}

Блок 1 будет единственным, который будет работать, даже если блок 2 будет соответствовать.Только первое соответствующее предложение catch оценивается.

2 голосов
/ 20 августа 2010

На один уровень вверх.

Вам понадобится еще один блок try // catch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...