что происходит, наконец, блокировать в следующих случаях? - PullRequest
2 голосов
/ 22 апреля 2010

если у меня есть следующий код

      try{

           //some code

      }catch(Exception e){

           //some code

      }finally{

      }

что происходит с блоком finally в следующих случаях

  1. , если происходят какие-либо проверенные исключения.

  2. , если вызывается System.exit ().

  3. , если происходят какие-либо непроверенные исключения.

  4. , если есть ошибкислучиться.

Ответы [ 7 ]

9 голосов
/ 22 апреля 2010
  1. finally блок выполнен.

  2. finally не выполняется, если только System.exit () не сгенерирует исключение, и в этом случае выполняется блок finally. (см. Как Java System.exit () работает с блоками try / catch / finally? )

  3. finally блок выполнен.

  4. finally выполняется блок (зависит от типа ошибки, хотя, если вы говорите об ошибке JVM, то на самом деле не известно, что может случиться)

3 голосов
/ 22 апреля 2010

JLS 14.20.2 Выполнение try-catch-finally

Все изложено довольно четко. finally всегда будет выполняться во всех этих случаях, за очевидным исключением успешного System.exit.

System.exit(int status)

Завершает работающую в данный момент виртуальную машину Java [...] Этот метод никогда не возвращает нормально.

2 голосов
/ 22 апреля 2010
  1. Finally будет выполнено.
  2. Finally не будет выполнено, если System.Exit() не сгенерирует исключение.
  3. Finally будет выполнено.
  4. Finally будет выполнено.
1 голос
/ 22 апреля 2010
  • 1 и 3 - сработает предложение catch, а после этого - предложение finally
  • 4 - сработает только предложение finally
  • 3 - программа закроется и finally не будет выполнена.Это потому что «Этот метод никогда не возвращается нормально.» finally будет запущен в случае, если System.exit(0) выдает исключение (SecurityException)
0 голосов
/ 22 апреля 2010

1.Если бывают проверенные исключения. код течет как

а. попробуйте ...
б. [проверенное исключение]
с. пропустить оставшуюся часть попытки и выполнить блок catch для проверенного исключения
д. выполнить наконец

2.Если System.exit () вызывается.
наконец выполняется. 3.Если бывают непроверенные исключения.
а. попробовать ...
б. [непроверенное исключение]
с. пропустить оставшуюся попытку и перейти, наконец,
д. выполнить наконец

4.Если есть ошибки.
Окончательно выполняется. Но программа запускается до того, как JVM выдает «Ошибка»

0 голосов
/ 22 апреля 2010

Единственный способ избежать предложения finally - это System.exit. В каждом другом случае достигается блок finally.

http://www.javaworld.com/javaworld/jw-02-1997/jw-02-hood.htm

http://java.sun.com/docs/books/jls/second_edition/html/exceptions.doc.html (раздел 11.3)

хорошие отзывы об этом.

0 голосов
/ 22 апреля 2010

Если предположить, что ни один из 4 элементов не произойдет в блоке finally, тогда блок finally будет выполнен до выхода кода, если не произойдет сбой виртуальной машины, тогда все ставки выключены. РЕДАКТИРОВАТЬ System.exit() фактически обходит finally {}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...