Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

зачем нужна конструкция finally?

7.8K
19 марта 2007 года
littlefrankie
57 / / 23.08.2006
мож я чего не пойму?

try {
//code...
}
catch (Exception e) {
//exception handler...
}
finally {
//final code...
}

блок finally вызывается вне зависимости от того произошло исключение в try или нет. Также он вызывается независимо от того, обработано ли исключение в одном из catch. Дык начерта он вообще нужен? Когда код из finally исполнен не будет? В книге прочитал такую хрень: "блок finally полезен для закрытия файлов и освобождения ресурсов" - великолепное пояснение:D
263
19 марта 2007 года
koltaviy
816 / / 16.12.2004
Код:
try
{
 ..
}
catch(Exception e)
{
 throw UserException;
}
finally
{
  ..
}

Если блока finally не будет, то управление после вызова исключения передастся блоку(функции) на порядок выше.
Если же блок finally существует, то до передачи управления обработается блок finally.
Такая конструкция обеспечивает освобождение ресурсов(закрытие файлов).
В C# также используется конструкция using.
6.6K
19 марта 2007 года
Aoli
185 / / 22.01.2007
Вот пример:
Код:
try {
открыли соединение с БД;
...
что-то делаем с БД;
...
return value;
}
catch (Exception e) {
Видимо, либо БД накрылась, либо еще что-то произошло -> выходим из функции;
}
finally {
закрываем соеднинение с бд;
}

Таким образом гарантируется, что чтобы ни случилось - соединение с БД закроется ВСЕГДА, даже если сделан return.
7.8K
21 марта 2007 года
littlefrankie
57 / / 23.08.2006
Всё равно не понятно каково практическое применение finally? только чтобы обработать "финальный" код в случае ексепшна внутри блока catch или возврата внутри try?
Как я читал про яву, этот язык избавлен от многих излишеств, которые запутывают программиста. По моему Finally - как раз то самое излишество.
63
21 марта 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: littlefrankie
Всё равно не понятно каково практическое применение finally?.


Aoli хороший пример привел, официально же это звучит так - [quote=Gosling]Предложение finally конструкции try предоставляет механизм передачи управления определенному блоку кода, не зависящий от итогов выполнения кода в блоке try [/quote].
Можно сказать так - если в коде есть блок finally - то, зайдя в блок try - его уже никак не обойти.
Приведу два практических способа примениея этой конструкции, чтобы ты не думал, что это семантическое и синтаксическое излишество:)
1. Пусть есть две операции, a() и b() - причем, необходимо, чтобы если выполнилось a() , выполнится и b(). Тогда пишем -

 
Код:
a();
try
{
    // Что то делаем
}
finally
{
    b();
}

a() вызывается вне блока проверки, и потому - если она вызовет проблемы, то b() тоже не выполнится. Если же выполнится a() - то управление перейдет в итоге, после кола try {} в блок finally{} всегда.
2.
 
Код:
Object val = null;
try
{
    val = до();
    // Другой код
}
finally
{
    if(val == null) после();
}

Так мы может отлавливать исключения до(), без помощт внешних средств.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог