Вложенные пробные блоки с уловами после ваще - PullRequest
0 голосов
/ 29 мая 2018

Я хочу написать такой код:

try {
    try {
        someStuffThatCausesBusinessExceptions();
    } finally {
        try {
            cleanUp();
        } catch (Exception e) {
            // I don't really care
        }
    }
} catch (BusinessLogicException e) {
    // work with exception
    // cleaning up must be done by that point (or at least tried to)
}

Выдержат ли исключения из бизнес-логики возможный перерыв во время очистки?Есть ли лучший способ игнорировать все возможные исключения из cleanUp?

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Да.Ваше исключение достигнет последнего улова.Тем не менее, эта структура кажется мне странной идиоматической, я думаю, я бы даже предпочел иметь cleanUp () более одного раза в этом коде, чем иметь 3 попытки.

0 голосов
/ 29 мая 2018
There are two cases-:

1. if excetpion occurs from  mehtod someStuffThatCausesBusinessExceptions only then it will be caught in your outer catch block.

2. if the methods someStuffThatCausesBusinessExceptions and cleanUp both throw exceptions then the exception thrown from try block is suppressed.

Yes!! there is better way.You can use try-with-resources statement.

Please refere to this link.
https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
0 голосов
/ 29 мая 2018

Блок catch будет захватывать только Throwables, которые были брошены в его соответствующий try блок.Таким образом, ваши исключения, выданные в окружающем блоке try, будут сохранены и перехвачены во внешнем блоке catch.

...