Что произойдет, если оба catch и finally блокируют исключение?Что произойдет, если оба catch и finally блокируют исключение?
ответ
Когда блок finally
выдает исключение, он будет эффективно скрывать исключение, выведенное из блока catch
, и будет в конечном итоге выбрано. Поэтому важно либо ломать исключения при захвате, либо следить за тем, чтобы блок finally не генерировал исключение, иначе вы можете получить исключения, которые задушены и никогда не видны.
были искушены сделать это, чтобы убедиться, что я контролирую каждое сообщение об исключении из моего кода блока внутри try. Я отдельно бросаю исключение –
Последнее исключение брошено.
Его уже ответили хорошо adrianbanks, но следующий пост должен быть интересным: Interesting Exception Results: Throwing Exceptions From the Finally Block
Я добавил комментарий к блогу, но результат Console Application, похоже, связан с тем, что CLR сообщает (первое) необработанное исключение во время фазы фильтра (когда обрабатывается предложение '' When 'VB.NET '), , вероятно, так, что можно вызвать отладчик, а затем найти строку первого исключения. Это наиболее просто отметили, напечатав что-то в 'finally' перед' throw'. Первое исключение записывается в журнал, затем обрабатывается 'finally' и регистрируется второе исключение. Это происходит для .NET Framework с 1.1 по 3.5. .NET 4.0 сообщает только о первом исключении. (1.0 и 4.5 недоступны.) –
HI Nwaman я думаю, что вы ответили неправильно я тестировал в окнах appliaction, я нашел, если и написать программу, как ниже один
try
{
string s = "hu";
int i = int.Parse(s);
}
catch (Exception ex)
{
string s = "hu";
int i = int.Parse(s);
throw new Exception();
}
finally
{
MessageBox.Show("hi");
}
и это не приведет, наконец, для преобразования приложений,
Хм, я просто попробовал это и, наконец, действительно выполнил. – agentnega
Существуют различные комбинации | гнездовые модели возможно как с уловом и финально блок. Возможно, вы захотите добавить фрагмент кода, чтобы описать ситуацию, о которой вы думаете. –
@Justin: (Не уверен, что вы будете уведомлены об этом ...) Я отменил изменение тэга, потому что (1) вы удалили Java, что резко изменило диапазон вопросов и (2) вы добавили VB. NET, которая во многих отношениях правильна не так, как это делается здесь ... (другими словами, я согласен с этим или удаляю C#, а также вижу, что .NET существует). –
@MarkHurd Проблема в том, что один или несколько ответов ссылаются на .Net конкретные решения - я не могу говорить о достоверности ответов на Java. Также у других вопросов VB.Net есть ссылки на этот вопрос (так как ответ один и тот же). – Justin