Java: пытаться ли выполнить все строки или перейти к перехвату?

Мне было интересно узнать о пути выполнения оператора java try-catch, и я не смог найти подробности о следующей ситуации.

Если у меня есть заявление, такое как:

try {

  // Make a call that will throw an exception
  thisWillFail();

  // Other calls below:
  willThisExecute();

} catch (Exception exception) {
  // Catch the exception
}

Будут ли строки под thisWillFail() выполняться до перехода к перехвату, или выполнение оператора try перейдет к перехвату, как только будет сгенерировано исключение?

Другими словами, безопасно ли предположить, что вызов 'b' после вызова 'a' будет выполнен при условии, что вызов 'a' не выдает исключение в операторе try?

Спасибо

5 ответов

Решение

НЕТ, строки ниже thisWillFail() не выполнит Выполнение будет перемещено в блок catch.

Если какое-либо предложение, включенное в предложение try, генерирует ошибку, будет выполнен код в предложении catch (соответствующий этой ошибке - вы можете иметь несколько catch для одной попытки). Невозможно заранее узнать, не удастся ли конкретное предложение или нет, только попытаться восстановить его после возникновения ошибки.

Другими словами, как только исключение thisWillFail() будет выполнена функция catch, и, таким образом, в обход willThisExecute() функция.

Почему бы тебе просто не проверить это самостоятельно?

Как только выдается исключение, блок try отменяется, и выполнение возобновляется с catch/finally заявления.

Он не будет выполнять никаких дальнейших инструкций в блоке try, он перейдет к блоку catch и выполнит блок catch. И после этого он будет выполнен окончательно (помните, что finally будет выполняться в каждом случае, независимо от того, есть какое-либо исключение или нет). читайте дальше, вот хорошая строка статьи ([ http://tutorials.jenkov.com/java-exception-handling/basic-try-catch-finally.html%5D)

в случае исключения блок try выполнит все операторы перед оператором исключения, а затем управление перейдет к блоку catch.

Другие вопросы по тегам