Основная опасность, о которой я могу подумать, заключается в том, что блок finally имеет возможность тихо глотать исключения и возвращать значения из самого блока try.
Например,
try {
doSomethingFancy();
} finally {
sendEmail();
}
Если doSomethingFancy выдает исключение, вы попытаетесь отправить электронное письмо. Если отправка электронного письма не удалась, sendEmail может выдать исключение. Это исключение «переопределит» исходное выброшенное, и вы никогда его не увидите. Это просто исчезнет.
Вы можете кодировать это с защитой, используя больше блоков try / catch, но просто помните ...