Обработка исключений: наконец выполняется после броска?

Я думаю, что, по большей части, изучая C хорошая идея, неважно, к какой арене Вы входите, по крайней мере, для приобретения навыка внутренних работ разработки программного обеспечения перед использованием предварительно упакованных товаров тот путь, если что-то идет не так, как надо, у Вас есть лучший шанс понимания внутренних работ. Существует много дискуссии об этом на Так, и это - довольно субъективный вопрос, но в целом Вы будете по сути использовать C в своем коде Objective C, таким образом, я предположу, что это действительно ваше дело. Я - земля вид человека, но иногда он может помешать, и я знаю несколько умных людей, которые проложили себе путь от вершины вниз, я думаю, что важная часть - то, что Вы добираетесь до понимания внутренних работ, поскольку он установит Ваши возможности кроме тех, кто не делает, а также увеличивает Ваши возможности.

18
задан Inno 16 October 2009 в 09:42
поделиться

5 ответов

Итак, мой простой вопрос: в случае исключения достигается ли блок finally, даже если до этого было выброшено несколько строк?

Да. Наконец блок всегда 1) выполняется и существует именно для очистки. В своем коде удалите блок Catch , он ничего не делает. Хуже того, это фактически уничтожает трассировку стека, потому что вы не генерируете повторно исходное исключение, а генерируете новое.

Если вам действительно нужен блок Catch , который затем повторно генерирует исключение, используйте следующее:

Catch e As XyzException
    ' … do some stuff. '
    Throw
End Try

1) : Caveat emptor: есть некоторые исключения, такие как StackOverflowException (насколько подходит…), которые требуют особого внимания и могут не вызывать Наконец блок.

25
ответ дан 30 November 2019 в 07:50
поделиться

Нет, запуск НЕ гарантируется. Есть определенные исключения, например StockOverflowException и OutOfMemoryException, где выполнение блока finally не гарантируется.

5
ответ дан 30 November 2019 в 07:50
поделиться

Практически во всех случаях объект finally будет выполняться в блоке Try / Catch (заметные исключения, в том числе при возникновении StackOverflowException или OutOfMemoryException). Мне любопытно, почему вы не попробовали это на себе. Ценный способ узнать что-то - это на самом деле испытать их на себе - в конце концов, вы можете в конечном итоге принять неправильный или вводящий в заблуждение ответ, и с этого момента вы будете работать под этой ложью.

1
ответ дан 30 November 2019 в 07:50
поделиться

ПРИМЕЧАНИЕ. Метод System.Environment.FastFail немедленно уничтожает текущий процесс / поток без выполнения разделов finally.

1
ответ дан 30 November 2019 в 07:50
поделиться

Да, это так, наконец, выполняется в любом случае. (есть только несколько исключений - Response.Redirect и некоторые случаи с многопоточностью)

0
ответ дан 30 November 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: