2013-06-26 2 views
13

Я пытаюсь использовать блок finally, не используя блоки try/catch, но получая ошибку в Eclipse.Действительно ли, чтобы окончательно блокировать без попытки и уловить?

Могу ли я использовать блок finally без использования блоков try/catch?

+0

Даже если вы могли бы поставить 'finally' без' try' как бы вы хотите, чтобы ваш 'finally' вести себя, если вы используете' goto' пропустить через 'finally' заявление? 'finally' относится только к коду, который, по его мнению, имеет отношение к использованию инструкции' try'. В противном случае поведение было бы очень раздражающим. – CodeCamper

+0

Вы имеете в виду, что используется в случае try-with-finally, без использования блока catch? Я думаю, вы не можете использовать только «наконец». он должен быть с некоторым блоком try. – user1923551

ответ

12

finally должен иметь по крайней мере блок try, catch не является обязательным. Пункт блоков finally состоит в том, чтобы убедиться, что материал очищается от того, выбрано ли исключение или нет. Согласно JLS

А, наконец, п гарантирует, что, наконец, блок выполняется после блока попытки и любого блока улова, который не может быть выполнен, независимо от того, как управление покидает блок TRY или поймать блок.

Следовательно, a finally всегда должен предшествовать блок try.

5

У вас должен быть блок try с блоком finally. Блок try определяет, какие строки кода будут сопровождаться кодом finally. Если исключение выбрано перед блоком try, код finally не будет выполнен.

Добавление catch блоков не является обязательным:

try { 

    // something 

} finally { 
    // guaranteed to run if execution enters the try block 
} 
1

Окончательно блок всегда выполняется, когда попытка блокировать выходы. Таким образом, вы можете использовать, наконец, без улова, но вы должны использовать try.

Для получения более подробной информации проверить doc здесь

0

От Трассы Oracle:

Окончательно блок всегда выполняется, когда попытка блокировать выходы. Этот гарантирует, что блок finally будет выполнен, даже если произойдет непредвиденное исключение .

Из приведенного выше утверждения вы не можете окончательно блокировать себя самостоятельно. ниже приведены допустимые комбинации.

  1. попробовать поймать наконец

  2. попробовать поймать

  3. попробовать наконец

0

гарантируется Код в finally блоке для выполнения, если поток управления программы входит cor отвечая try блок. Поэтому нет смысла иметь finally без try.

Единственным исключением является то, что программа встречает вызов System.exit(...) перед блоком finally, поскольку это завершает работу виртуальной машины.

0

Нет, вы не можете

вы можете использовать Try-catch-finally или try-finally

try { 

    }catch (Exception e){ 

    } 
    finally{ 

    } 

или

try { 

    } 
    finally{ 

    } 
1

Причина, почему вы не можете иметь finally без try потому, что вы могли есть несколько finally состояние в том же объеме, и try указывает, к какому блоку кода относится finally в случае возникновения ошибки.

Еще одна интересная особенность finally заключается в том, что она должна выполняться независимо от того, когда вводится try. Например, что, если вы используете goto, чтобы пропустить свой оператор finally? Если goto находится внутри try, он выполнит оператор finally, однако, если goto находится выше/за пределами инструкции try, тогда он пропустит код finally. finally относится только к коду, который находится в try. Если у вас нет попытки, то finally не имеет никакого отношения ни к чему.

1
  • Неправильное использование только блока try.
  • Try block может использоваться только с одним блоком от улова или, наконец, блок.
  • Вы можете использовать блок try с catch и finally.If вы используете, наконец, блок с блоком try, тогда catch block станет необязательным.
2
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 
} 
+2

вы должны добавить объяснение – Zelldon