Блок finally всегда запускается после завершения блока try, независимо от того, завершается ли попытка нормально или ненормально из-за исключительной ситуации, например, throwable.
Если исключение выдается каким-либо кодом из блока try, тогда текущий метод просто повторно генерирует (или продолжает генерировать) то же исключение (после запуска блока finally).
Если блок finally генерирует исключение / ошибку / throwable, и уже существует ожидающийбросаемый, это становится уродливым.Откровенно говоря, я забыл, что именно происходит (так много для моей сертификации лет назад).Я думаю , что оба throwables связаны друг с другом, но есть какое-то специальное вуду, которое вы должны сделать (то есть - вызов метода, который я должен был бы найти), чтобы получить исходную проблему до того, как "finally" вызовет ошибку., вырвало.
Кстати, попробуйте / наконец-то довольно распространенная вещь для управления ресурсами, так как у java нет деструкторов.
Например -
r = new LeakyThing();
try { useResource( r); }
finally { r.release(); } // close, destroy, etc
"И, наконец, «еще один совет: если вы делаете потрудитесь поставить поймать, либо поймать определенные (ожидаемые) бросаемые подклассы, либо просто поймать« Throwable », not « Exception »,для общей ловушки всех ошибок.Слишком много проблем, таких как размышления, выбрасывают «Ошибки», а не «Исключения», и они будут проскальзывать под любым «поймать все», закодированным как:
catch ( Exception e) ... // doesn't really catch *all*, eh?
, сделайте это вместо:
catch ( Throwable t) ...