Действительно ли он окончательно блокируется без попытки и улова?
Я пытаюсь использовать блок finally без использования блоков try/catch, но получаю ошибку в Eclipse.
Можно ли использовать блок finally без использования блоков try/catch?
Ответы
Ответ 1
finally
должен иметь по крайней мере блок try
, catch
не является обязательным. Пункт блоков finally состоит в том, чтобы убедиться, что материал очищается от того, выбрано ли исключение или нет. Согласно JLS
Предложение finally гарантирует, что блок finally будет выполнен после блока try и любого блока catch, который может быть выполнен, независимо от того, как элемент управления покидает блок try или catch.
Следовательно, a finally
всегда должен предшествовать блок try
.
Ответ 2
У вас должен быть блок try
с блоком finally
. Блок try
определяет, какие строки кода будут сопровождаться кодом finally
. Если перед блоком try
выбрано исключение, код finally
не будет выполняться.
Добавление блоков catch
необязательно:
try {
// something
} finally {
// guaranteed to run if execution enters the try block
}
Ответ 3
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
}
Ответ 4
Блок finally всегда выполняется, когда блок try завершается. Таким образом, вы можете использовать, наконец, без catch, но вы должны использовать try.
Подробнее... doc здесь
Ответ 5
Причина, по которой вы не можете иметь finally
без try
, потому что у вас может быть несколько операторов finally
в той же области видимости, а try
указывает, к какому блоку кода относится finally
в случае возникает ошибка.
Еще одна интересная особенность finally
заключается в том, что она должна выполняться независимо от того, когда вводится try
. Например, что, если вы используете goto
, чтобы пропустить инструкцию finally
? Если goto
находится внутри try
, он будет выполнять оператор finally
, однако, если goto
находится выше/вне инструкции try
, тогда он пропустит код finally
. finally
относится только к коду, который окружен в try
. Если вы не пытаетесь, то finally
не имеет отношения ни к чему.
Ответ 6
- Использование только блока try неверно.
- Блок try может использоваться только с одним блоком из catch или, наконец,
блок.
- Вы можете использовать блок try с catch и finally.If вы используете, наконец, блок
с блоком try, тогда блок catch станет необязательным.
Ответ 7
Из Oracle Trails:
Блок finally всегда выполняется, когда блок try завершается. Эта гарантирует, что блок finally будет выполнен, даже если неожиданное исключение.
Из приведенного выше утверждения вы не можете окончательно блокировать себя самостоятельно. ниже приведены допустимые комбинации.
Ответ 8
Код в блоке finally
гарантированно выполнится, если поток управления программой входит в соответствующий блок try
. Поэтому нет смысла иметь finally
без try
.
Единственное исключение: если программа встречает вызов System.exit(...)
перед блоком finally
, так как это завершает работу виртуальной машины.
Ответ 9
Нет, вы не можете
вы можете использовать Try-catch-finally
или try-finally
try {
}catch (Exception e){
}
finally{
}
или
try {
}
finally{
}