c exception handling tutorial with code examples
Обработката на изключения е метод за обработка на грешки, които могат да възникнат по време на изпълнението на програма. Този урок обяснява обработката на изключения в C # с примери за кодове:
най-добрият безплатен софтуер за поддръжка на Windows 10
Обработката на изключения се използва, за да се гарантира, че програмният поток е продължен, дори ако има грешка по време на изпълнение. Изключения са обектите, които се хвърлят при среща с грешка по време на изпълнение.
Ако изключенията не бъдат обработени, тогава C # ще изведе съобщение за изключение и ще прекрати програмата, това е мястото, където обработката на изключения влиза в картината.
=> Прочетете ръководството за начинаещи C # тук
Какво ще научите:
- Какви са изключенията?
- Ключови думи за обработка на изключения
- Класове на изключения, представени в C #
- Обработка на изключения в C #
- Заключение
- Препоръчително четене
Какви са изключенията?
Изключения са безпрецедентни грешки, които могат да възникнат във вашата програма по време на изпълнение. Повечето време програмистите могат лесно да открият някои от грешките като валидиране или нулева проверка или докато проверяват някои стойности.
Но има определени моменти, когато не можем да предвидим какво или кога ще се появи грешка. Например, да кажем, че търся файл на място. Програмата ми ще работи напълно добре, докато файлът присъства и ако по някакъв начин файлът се изтрие, програмата ми ще изведе грешка.
Изключенията не се случват редовно, но все пак могат да се случат и винаги ще искате да боравите внимателно с тях. За да се справим с тях, ние използваме обработка на изключения.
Всеки път, когато възникне грешка, ние казваме, че тя е хвърлена, „хвърлен” е обект от System.Exception клас в C #. The System.Exception class предлага различни методи и свойства, които дават подробности за грешката, която вашата програма току-що е срещнала.
Подобно на свойството за проследяване на стека, което осигурява стека, за който е възникнал проблемът, или свойството Message, което предоставя описание на изключението.
модели на жизнения цикъл на софтуер за водопад
Ключови думи за обработка на изключения
Изключенията предлагат процес за управление на определена част от програмата, така че дори да има изключение в тази част, тогава програмният контрол се прехвърля в друга част на програмата. В C # обработката на изключения основно се изгражда около четири ключови думи: хвърлете, опитайте, хванете и накрая .
хвърляне
Както вече обсъдихме хвърлянето е обект от System.Exception клас в C #. Позволява на програмата да хвърля грешка, когато срещне такава.
опитвам
Опитайте блок затваря блока на кода, който може да накара програмата да изведе изключение. Следва един или повече блокове за улов.
улов
Когато опитният блок срещне изключение, той предоставя контрола на блока catch, за да улови изключението. Блокът catch може също да съдържа набор от кодове, които програмата трябва да изпълни в случай на изключение, или може просто да улови изключението и да не направи нищо в зависимост от сценария и изискването.
накрая
Последният блок се използва за изпълнение на определен кодов фрагмент или инструкция, независимо от появата на изключение. Накрая блокът винаги се изпълнява и може да се изпълни непосредствено след опитващия блок, ако програмата не намери изключение или може да се изпълни след блока catch, след като програмата улови изключение.
Класове на изключения, представени в C #
Всички изключения в C # са получени директно или индиректно от System.Exception клас.
Нека разгледаме накратко някои от най-често срещаните изключения:
- System.IO.IOException: Той обработва всички грешки, свързани с входа и изхода.
- System.DividedByZeroException: Обработва грешка, хвърлена, когато число е разделено на нула.
- System.NullReferenceException : Обработва всяка грешка, която може да възникне, когато е посочен нулев обект.
- System.IndexOutOfRangeException: Обработва грешка, хвърлена, когато програма се опитва да получи достъп до индекс, който е извън обхвата на масива.
- System.OutOfMemoryException: Обработва грешка, хвърлена поради недостатъчно присъствие на паметта.
Обработка на изключения в C #
C # има много добре дефинирано решение за обработка на всякакъв вид изключения, които могат да възникнат чрез използване на блока try and catch. Използвайки този блок, ядрото на програмата може да бъде отделено от останалите изрази.
Пример:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } Console.ReadLine(); } } }
В горния пример ние приложихме нашия код за отваряне на файл под блока try. Тъй като не сме предоставили валиден файлов път, кодът трябва да изведе грешка. Сега уловихме грешката в нашия блок за улов. Ако файлът не съществува в дадената файлова пътека, тогава кодът ще хвърли FileNotFoundException.
Това изключение ще бъде уловено от блока catch, където вече сме дефинирали очакваното изключение. Сега, нека си представим, ако нашият код хвърля някакво друго изключение, различно от това, което вече сме дефинирали, тогава нашият блок няма да може да го улови. За да уловим някакво общо изключение, ще добавим още един блок за улов.
Нека да разгледаме нашия актуализиран код:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } catch (Exception e) { Console.WriteLine(e.ToString()); } Console.ReadLine(); } } }
Този общ блок за хващане ще може да улови всички изключения, които могат да бъдат хвърлени в блока за опит. Сега, нека добавим и блок накрая, за да завършим това. За да го улесним, нека просто отпечатаме съобщение, като използваме блока окончателно.
въпроси и отговори за интервю за Java програма
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Console.WriteLine('Finally block executed'); } Console.ReadLine(); } } }
Тук току-що добавихме блока накрая с просто съобщение. Можете също да добавите някои персонализирани изявления в блока. Но цялостната структура на програмата ще остане подобна на показаната тук.
Блокът Final винаги ще бъде изпълнен, независимо дали има изключение или не. Програмата ще започне от блока try и след това ще премине директно към блока final, ако няма грешки / изключения. Ако срещне изключение, то първо ще премине към catch и след това ще изпълни последния блок.
Има ли условие, когато окончателният блок няма да бъде изпълнен?
Както подсказва името, последният блок се изпълнява в края и е последният блок на кода, който ще бъде изпълнен. Накрая блокът винаги ще се изпълнява, когато приложението работи. Единственият момент, когато окончателно блокирането няма да се изпълни, е когато приложението се срине или умишлено бъде убито с помощта на командата за процес.
Заключение
Ако изключенията не се обработват правилно, те ще доведат до грешка във вашата програма. Ако не сте използвали блокове try / catch навсякъде в кода си, тогава програмата ви ще прекрати със съобщение, показващо изключението. За обикновен потребител това ще бъде много трудно да проследи грешката обратно до изходния код и да я разреши.
Следователно винаги е добра практика да осигурите обработка на изключения във вашата програма.
Примерен код
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Console.WriteLine('Finally block executed'); } Console.ReadLine(); } } }
=> Вижте нашата пълна серия за обучение C # тук
Препоръчително четене
- Урок за функции / методи на C # с примери за кодове
- Урок за Python DateTime с примери
- Урок за SVN: Управление на изходния код с помощта на Subversion
- Инструкция за C # String - Методи за низове с примери за кодове
- Обработка на изключения в C ++
- Tortoise SVN Tutorial: Ревизии в кодовото хранилище
- Урок за AWS CodeBuild: Извличане на код от Maven Build
- Как да се справя с изключенията в скриптове Groap на SoapUI - Урок № 11 за SoapUI