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

#java #try-catch #order-of-execution

#java #try-catch #порядок выполнения

Вопрос:

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

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

 try {

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

  // Other calls below:
  willThisExecute();

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

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

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

Спасибо

Комментарии:

1. Что мешает вам попробовать это?

2. Ничего, кроме времени, но я подумал, что это будет полезный вопрос и для других, поскольку я не смог легко найти ответ.

Ответ №1:

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

Комментарии:

1. Я выбрал ваш ответ, потому что он был прямым и точным, хотя другие ответы тоже были правильными и полезными.

Ответ №2:

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

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

Ответ №3:

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

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

Ответ №4:

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

Ответ №5:

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