Что точно делает a finally
блок в обработке исключений работает?
Он содержит код, который должен выполняться всегда, независимо от того, возникает ли исключение.
Например, если вы открыли файл, вы должны закрыть его в блоке finally
, чтобы он всегда был закрыт; если вы закрыли его в блоке try
, более раннее исключение заставило бы выполнение перейти прямо к блоку catch
и пропустить закрытие файла.
Подробнее см. Учебные пособия по Java .
Он выполняется независимо от того, попали вы в блок catch
или нет, а это означает, что это отличное место для удаления объектов и выполнения других операций по очистке.
Я часто использую его для очистки открытых ресурсов, когда в блоке кода есть несколько операторов возврата, что делает код намного чище, чем вы ' Перед каждым оператором возврата необходимо клонировать один и тот же код «закрытия ресурса». Гарантируется, что код вызовет секцию finally, даже если вы вернетесь в секции try. Это также помогает с безопасностью кода в этом случае, поскольку программист может легко случайно пропустить его.
Блок finally выполняется всегда, независимо от того, было ли создано исключение. Классический пример использования, который я могу придумать, - это закрытие файлов.
FileOutputStream stream = null;
try{
// do stuff with the stream here
} catch (IOException ex){
// handle exception
} finally{
// always close the stream
if(stream != null){
stream.close();
}
}