Я пытаюсь использовать блок finally, не используя блоки try/catch, но получая ошибку в Eclipse.Действительно ли, чтобы окончательно блокировать без попытки и уловить?
Могу ли я использовать блок finally без использования блоков try/catch?
Я пытаюсь использовать блок finally, не используя блоки try/catch, но получая ошибку в Eclipse.Действительно ли, чтобы окончательно блокировать без попытки и уловить?
Могу ли я использовать блок finally без использования блоков try/catch?
finally
должен иметь по крайней мере блок try
, catch
не является обязательным. Пункт блоков finally состоит в том, чтобы убедиться, что материал очищается от того, выбрано ли исключение или нет. Согласно JLS
А, наконец, п гарантирует, что, наконец, блок выполняется после блока попытки и любого блока улова, который не может быть выполнен, независимо от того, как управление покидает блок TRY или поймать блок.
Следовательно, a finally
всегда должен предшествовать блок try
.
У вас должен быть блок try
с блоком finally
. Блок try
определяет, какие строки кода будут сопровождаться кодом finally
. Если исключение выбрано перед блоком try
, код finally
не будет выполнен.
Добавление catch
блоков не является обязательным:
try {
// something
} finally {
// guaranteed to run if execution enters the try block
}
Окончательно блок всегда выполняется, когда попытка блокировать выходы. Таким образом, вы можете использовать, наконец, без улова, но вы должны использовать try.
Для получения более подробной информации проверить doc здесь
От Трассы Oracle:
Окончательно блок всегда выполняется, когда попытка блокировать выходы. Этот гарантирует, что блок finally будет выполнен, даже если произойдет непредвиденное исключение .
Из приведенного выше утверждения вы не можете окончательно блокировать себя самостоятельно. ниже приведены допустимые комбинации.
попробовать поймать наконец
попробовать поймать
попробовать наконец
гарантируется Код в finally
блоке для выполнения, если поток управления программы входит cor отвечая try
блок. Поэтому нет смысла иметь finally
без try
.
Единственным исключением является то, что программа встречает вызов System.exit(...)
перед блоком finally
, поскольку это завершает работу виртуальной машины.
Нет, вы не можете
вы можете использовать Try-catch-finally
или try-finally
try {
}catch (Exception e){
}
finally{
}
или
try {
}
finally{
}
Причина, почему вы не можете иметь finally
без try
потому, что вы могли есть несколько finally
состояние в том же объеме, и try
указывает, к какому блоку кода относится finally
в случае возникновения ошибки.
Еще одна интересная особенность finally
заключается в том, что она должна выполняться независимо от того, когда вводится try
. Например, что, если вы используете goto
, чтобы пропустить свой оператор finally
? Если goto
находится внутри try
, он выполнит оператор finally
, однако, если goto
находится выше/за пределами инструкции try
, тогда он пропустит код finally
. finally
относится только к коду, который находится в try
. Если у вас нет попытки, то finally
не имеет никакого отношения ни к чему.
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
}
вы должны добавить объяснение – Zelldon
Даже если вы могли бы поставить 'finally' без' try' как бы вы хотите, чтобы ваш 'finally' вести себя, если вы используете' goto' пропустить через 'finally' заявление? 'finally' относится только к коду, который, по его мнению, имеет отношение к использованию инструкции' try'. В противном случае поведение было бы очень раздражающим. – CodeCamper
Вы имеете в виду, что используется в случае try-with-finally, без использования блока catch? Я думаю, вы не можете использовать только «наконец». он должен быть с некоторым блоком try. – user1923551