Обработка исключений
Что такое Exception?
Исключение — это любое состояние ошибки или непредвиденное поведение, возникающее при выполнении программы. В .NET исключение — это объект, наследуемый от класса System.Exception. Исключение создается из области кода, где произошла проблема. Оно передаётся вверх по стеку до тех пор, пока его не обработает приложение либо программа не завершится.
Для чего служат try, catch, finally? В каком случае может не выполниться блок finally?
Конструкция try...catch...finally предназначена для обработки исключений. При использовании блока try...catch...finally происходит следующее:
-
Выполнение блока try:
- Все инструкции в блоке
tryвыполняются.
- Все инструкции в блоке
-
Блок try завершен без исключений:
- Если в блоке
tryне возникло исключений, то после его выполнения начинает выполняться блокfinally.
- Если в блоке
-
Исключение в блоке try:
- Если в блоке
tryвозникает исключение, то обычный порядок выполнения останавливается, и среда CLR начинает искать блокcatch, который может обработать данное исключение.
- Если в блоке
-
Обработка исключения блоком catch:
- Если нужный блок
catchнайден, то он выполняется, и после его завершения выполняется блокfinally.
- Если нужный блок
-
Исключение не обработано:
- Если нужный блок
catchне найден, то при возникновении исключения программа аварийно завершает свое выполнение.
- Если нужный блок
Пример:
try {
// Код, который может вызвать исключение
}
catch (Exception ex) {
// Обработка исключения
}
finally {
// Код, который выполняется всегда
}
-
try: Содержит код, который может вызвать исключение.
-
catch: Содержит код для обработки исключения.
-
finally выполняется при обычном выходе из try, включая return и раскрутку стека при исключении. Это не абсолютная гарантия: блок может не выполниться при Environment.FailFast, принудительном завершении процесса или если выполнение не выходит из try.
Что такое call stack? Какие ключевые слова вы знаете?
Стек вызовов хранит цепочку активных вызовов методов. Окно Call Stack отладчика показывает эту цепочку; это представление стека, а не его определение. Для работы с исключениями используются try, catch, finally и throw.