В чём смысл finally?

В java и c# есть конструкция try-catch-finally. Зачем нужен finally, если
try {
    Integer.parseInt("test");
    System.out.println("try");
}
catch (Exception ex) {
    System.out.println("catch");
}
finally {
    System.out.println("finally");
}

и

try {
    Integer.parseInt("test");
    System.out.println("try");
}
catch (Exception ex) {
    System.out.println("catch");
}
System.out.println("finally");

выводят одно и то же?
  • Вопрос задан
  • 1577 просмотров
Решения вопроса 1
E1ON
@E1ON
Programming, Gamedev, VR
Finally гарантирует выполнение кода, независимо от того, была ошибка или нет.
А что будет, если код, обрабатывающий исключение, сам вбросит исключение?

try
{
  throw new ArgumentException();
}
catch(Exception)
{
      // any new exception thrown here
} 
CodeCleanup();


В данном случае выполнение логики прервется, соответственно, метод CodeCleanup не будет выполнен.

Подобное может случиться, например при вызовах методов, которые выполняют определенные сетевые операции, которые отваливаются по Timeout-у. В таком случае обычно делают N-ое кол-во повторных вызовов того же метода, чтобы исключить проблемы, связанные с настабильностью сети.

Finally решает эту проблему.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы