Ветка finally
Ветка finally используется в конструкции
try и позволяет выполнить блок кода
в любом случае: было ли выброшено исключение,
было ли оно перехвачено, или же выполнение
прошло успешно. Код внутри finally
выполняется всегда, даже если внутри
try или catch произошел
return, break или
continue. Ветка finally не
принимает параметров и записывается после
блоков try и catch.
Синтаксис
try {
// code that may throw
} catch (e) {
// handle exception
} finally {
// always executed
}
Пример
Давайте посмотрим, как работает finally,
когда исключение не возникает:
void main()
{
try {
print('try');
} catch (e) {
print('catch');
} finally {
print('finally');
}
}
Результат выполнения кода:
"try"
"finally"
Пример
А теперь давайте выбросим исключение и
перехватим его, чтобы увидеть, что
finally все равно выполнится:
void main()
{
try {
throw Exception('error');
} catch (e) {
print('catch');
} finally {
print('finally');
}
}
Результат выполнения кода:
"catch"
"finally"
Пример
Ветка finally выполнится даже в том
случае, если внутри try сработает
return. Давайте проверим это:
void main()
{
String res = test();
print(res);
}
String test()
{
try {
return 'try';
} finally {
print('finally');
}
}
Результат выполнения кода:
"finally"
"try"
Пример
Если внутри finally тоже стоит
return, то именно он определит
итоговое значение функции, перекрывая
return из try:
void main()
{
String res = test();
print(res);
}
String test()
{
try {
return 'try';
} finally {
return 'finally';
}
}
Результат выполнения кода:
"finally"