Блок finally
Блок finally используется в конструкции
try-catch-finally и позволяет
выполнить код, который должен быть выполнен
в любом случае: произошло исключение или нет,
было ли оно перехвачено или нет. Блок
finally не принимает параметров и не
возвращает значений. Он выполняется даже
в том случае, если в блоке try или
catch произошел выход из метода
с помощью return. Единственный случай,
когда блок finally может не выполниться -
это принудительное завершение работы
виртуальной машины Java.
Синтаксис
try
{
// код, который может вызвать исключение
}
catch (Exception e)
{
// обработка исключения
}
finally
{
// код, который выполнится всегда
}
Пример
Давайте рассмотрим базовый пример, где
исключение не возникает, но блок finally
все равно выполняется:
public class Main
{
public static void main(String[] args)
{
try
{
int res = 10 / 2;
System.out.println("Result: " + res);
}
catch (ArithmeticException e)
{
System.out.println("Error: " + e.getMessage());
}
finally
{
System.out.println("Finally block executed");
}
}
}
Результат выполнения кода:
"Result: 5"
"Finally block executed"
Пример
Теперь рассмотрим случай, когда возникает исключение и оно перехватывается:
public class Main
{
public static void main(String[] args)
{
try
{
int res = 10 / 0;
System.out.println("Result: " + res);
}
catch (ArithmeticException e)
{
System.out.println("Caught: " + e.getMessage());
}
finally
{
System.out.println("Finally block executed");
}
}
}
Результат выполнения кода:
"Caught: / by zero"
"Finally block executed"
Пример
Особый интерес представляет ситуация,
когда в блоке try выполняется
return. Блок finally все равно
будет выполнен перед возвратом значения:
public class Main
{
public static int test()
{
try
{
return 1;
}
finally
{
System.out.println("Finally works");
}
}
public static void main(String[] args)
{
int res = test();
System.out.println("Result: " + res);
}
}
Результат выполнения кода:
"Finally works"
"Result: 1"
Смотрите также
-
оператор
try,
который определяет блок кода для проверки исключений -
оператор
catch,
который перехватывает и обрабатывает исключения -
оператор
throw,
который генерирует исключение -
конструкция
try-with-resources,
которая автоматически управляет ресурсами