Я пытаюсь использовать блок finally без использования блоков try/catch, но получаю ошибку в Eclipse.
Можно ли использовать блок finally без использования блоков try/catch?
Я пытаюсь использовать блок finally без использования блоков try/catch, но получаю ошибку в Eclipse.
Можно ли использовать блок finally без использования блоков try/catch?
finally должен иметь по крайней мере блок try, catch не является обязательным. Пункт блоков finally состоит в том, чтобы убедиться, что материал очищается от того, выбрано ли исключение или нет. Согласно JLS
Предложение finally гарантирует, что блок finally будет выполнен после блока try и любого блока catch, который может быть выполнен, независимо от того, как элемент управления покидает блок try или catch.
Следовательно, a finally всегда должен предшествовать блок try.
У вас должен быть блок try с блоком finally. Блок try определяет, какие строки кода будут сопровождаться кодом finally. Если перед блоком try выбрано исключение, код finally не будет выполняться.
Добавление блоков catch необязательно:
try {
// something
} finally {
// guaranteed to run if execution enters the try block
}
try {
// Block of code with multiple exit points
}
finally {
// Block of code that must always be executed when the try block
// is exited, no matter how the try block is exited
}
Блок finally всегда выполняется, когда блок try завершается. Таким образом, вы можете использовать, наконец, без catch, но вы должны использовать try.
Подробнее... doc здесь
Причина, по которой вы не можете иметь finally без try, потому что у вас может быть несколько операторов finally в той же области видимости, а try указывает, к какому блоку кода относится finally в случае возникает ошибка.
Еще одна интересная особенность finally заключается в том, что она должна выполняться независимо от того, когда вводится try. Например, что, если вы используете goto, чтобы пропустить инструкцию finally? Если goto находится внутри try, он будет выполнять оператор finally, однако, если goto находится выше/вне инструкции try, тогда он пропустит код finally. finally относится только к коду, который окружен в try. Если вы не пытаетесь, то finally не имеет отношения ни к чему.
Из Oracle Trails:
Блок finally всегда выполняется, когда блок try завершается. Эта гарантирует, что блок finally будет выполнен, даже если неожиданное исключение.
Из приведенного выше утверждения вы не можете окончательно блокировать себя самостоятельно. ниже приведены допустимые комбинации.
попробовать поймать наконец
попробовать поймать
попробовать наконец
Код в блоке finally гарантированно выполнится, если поток управления программой входит в соответствующий блок try. Поэтому нет смысла иметь finally без try.
Единственное исключение: если программа встречает вызов System.exit(...) перед блоком finally, так как это завершает работу виртуальной машины.
Нет, вы не можете
вы можете использовать Try-catch-finally или try-finally
try {
}catch (Exception e){
}
finally{
}
или
try {
}
finally{
}