В блоке Java try{} ... catch{} ... finally{} код в finally{} обычно считается "гарантированным" для запуска независимо от того, что происходит в try/catch. Однако я знаю, по крайней мере, о двух обстоятельствах, при которых он не будет выполняться:
- Если
System.exit(0)вызывается; или, - если исключение генерируется вплоть до JVM и происходит поведение по умолчанию (т.е.
printStackTrace()и выход)
Есть ли другие программные поведения, которые предотвратят выполнение кода в блоке finally{}? В каких конкретных условиях будет выполняться код или нет?
EDIT: Как указывало NullUserException, второй случай на самом деле не соответствует действительности. Я думал, это потому, что текст стандартной ошибки печатается после этого в стандартном формате, предотвращая просмотр текста без прокрутки.:) Извинения.