Шта је изузетак?
Изузетак се односи на проблем који се јавља током извршавања програма. До њега долази неочекиваном околношћу. Добар пример је када изводите операцију дељења, а затим делите са нулом (0). Подесиће се изузетак.
У овом упутству за Висуал Басиц научићете:
- Шта је изузетак?
- Шта је руковање изузецима?
- Синтакса Три / Цатцх
- Пример за руковање изузецима
- Кориснички дефинисани изузеци
- Бацање предмета
Шта је руковање изузецима?
Уз изузетке, можете пренијети контролу над програмом из једног дијела у други. У ВБ.НЕТ-у се изузеци обрађују помоћу следеће 4 кључне речи:
Кључна реч | Детаљ |
Покушати | Рад блока Три је да идентификује блок кода за који ће се активирати одређени изузетак. Треба да следи блок (ови) за улов. |
Улов | Хватање изузетка се врши у овом блоку. То је обрађивач изузетака у којем се обрађује изузетак. |
Коначно | Користите блок Коначно за покретање скупа изјава без обзира да ли се изузетак догодио или не. |
Баци | Изузетак се појављује након појаве проблема. Ово је дело кључне речи Тхров. |
Синтакса Три / Цатцх
Извештаји Три / Цатцх узимају синтаксу наведену у наставку:
Try[ try_Statement(s) ][ Exit Try ][ Catch [ exception_name [ As type ] ] [ When expression ][ catch_Statement(s) ][ Exit Try ] ][ Catch… ][ Finally[ finally_Statement(s) ] ]End Try
Блок Три / Цатцх треба да окружује код који може створити изузетак. Овај код је познат као заштићени код. Можете користити више изјава цатцх када требате ухватити разне врсте изузетака.
Пример за руковање изузецима
Помоћу изјава Три / Цатцх можете да одвојите свој уобичајени програмски код од система за руковање грешкама. Покажимо како се рукује изузетком помоћу кључних речи Три, Цатцх и Финал.
Корак 1) Направите нову конзолу.
Корак 2) Користите овај код:
Module Module1Sub divisionFunction(ByVal n1 As Integer, ByVal n2 As Integer)Dim answer As IntegerTryanswer = n1 \ n2Catch ex As DivideByZeroExceptionConsole.WriteLine("Exception: {0}", ex)FinallyConsole.WriteLine("Answer is: {0}", answer)End TryEnd SubSub Main()divisionFunction(4, 0)Console.ReadKey()End SubEnd Module
Корак 3) Кликните дугме Старт на траци са алаткама да бисте извршили код. Требали бисте добити следећи излаз:
Ево снимка екрана кода:
Објашњење кода:
- Креирање модула под називом Модуле1.
- Креирање потпроцедуре под називом ДивисионФунцтион са два целобројна аргумента н1 и н2. БиВал је ВБ.НЕТ кључна реч која наводи да ће се вредности аргумената преносити по вредности.
- Креирање целобројне променљиве са именом одговор.
- Почетак блока Три / Цатцх. Морамо окружити код за који сумњамо да може створити изузетак овим блоком.
- Извођење операције дељења између вредности променљивих н1 и н2. Резултат операције дељења додељује се променљивој одговор. Овај код може створити изузетак, на пример, када број поделимо са нулом, па смо га окружили блоковима Три / Цатцх.
- Хватање изузетка под именом ДивидеБиЗероЕкцептион и додељивање генерисане поруке изузетку бившем.
- Штампање одређеног текста на конзоли ради обавештавања корисника о врсти / имену изузетка који је покренут.
- Блок Коначно. Ово ће извршити било да је изузетак ухваћен или не.
- Штампање текста на конзоли који приказује резултат операције поделе.
- Крај блока Три, односно крај кода за руковање грешкама.
- Крај поддељења Функција потпроцедура.
- Почетак главног потпроцедура.
- Позивање / позивање на подпроцедуцију ДивисионФунцтион. Овде се преносе вредности два целобројна аргумента. Вредност н1 = 4 и н2 = 0. То значи да ће операција дељења бити 4 \ 0, односно н1 \ н2.
- Паузирање прозора конзоле чекајући да корисник предузме мере за његово затварање.
- Крај главног потпроцедура.
- Крај модула.
Кориснички дефинисани изузеци
ВБ.НЕТ вам омогућава да дефинишете сопствене изузетке. Кориснички дефинисане класе изузетака можете добити из класе АпплицатионЕкцептион. Покажимо то на примеру:
Корак 1) Направите нову конзолу.
Корак 2) Користите следећи код:
Module Module1Public Class HeightIsZeroException : Inherits ApplicationExceptionPublic Sub New(ByVal text As String)MyBase.New(text)End SubEnd ClassPublic Class HeightDim height As Integer = 0Sub showHeight()If (height = 0) ThenThrow (New HeightIsZeroException("Zero Height found"))ElseConsole.WriteLine("Height is: {0}", height)End IfEnd SubEnd ClassSub Main()Dim hght As Height = New Height()Tryhght.showHeight()Catch ex As HeightIsZeroExceptionConsole.WriteLine("HeightIsZeroException: {0}", ex.Message)End TryConsole.ReadKey()End SubEnd Module
Корак 3) Кликните дугме Старт на горњој траци да бисте извршили код. Требали бисте добити следећи излаз:
Ево снимка екрана кода:
Објашњење кода:
- Креирање модула под називом Модуле1.
- Креирање класе изузетка под називом ХеигхтИсЗероЕкцептион. Класа наслеђује све класе АпплицатионЕкцептион.
- Креирање потпроцедуре под називом Нев. Биће потребан један аргумент у низу под називом тект.
- Позивање конструктора основне класе и преношење на њега горњег аргумента.
- Крај новог потпроцедура.
- Крај класе ХеигхтИсЗероЕкцептион.
- Креирање класе по имену Висина. Његов модификатор јавног приступа је Публиц, што значи да ће бити јавно доступан.
- Креирање целобројне променљиве имена Хеигхт и иницијализација њене вредности на 0.
- Креирање потпроцедуре под називом сховХеигхт ().
- Провера када је вредност променљиве Хеигхт 0. Користили смо услов Иф ... Тхен.
- Бацити ХеигхтИсЗероЕкцептион ако је горњи услов тачан. Порука Зеро Хеигхт Фоунд ће бити приказана када се баци овај изузетак.
- Други део који треба извршити када услов Иф није тачан.
- Порука за испис на конзоли која приказује висину када није 0.
- Крај услова Иф.
- Крај потпроцедуре сховХеигхт ().
- Крај часа Висина.
- Почетак главног потпроцедура.
- Креирање објекта по имену Хеигхт као инстанце класе Хеигхт.
- Почетак блока за руковање изузецима.
- Позивање на подпроцедуру сховХеигхт () дефинисану у класи Хеигхт. За приступ овој методи користили смо објекат ове класе. Ова линија може резултирати изузетком. Стога смо га окружили кодом за руковање изузецима.
- Хватање изузетка ХеигхтИсЗероЕкцептион као објекта ек у случају да се догоди.
- Порука за испис на конзоли када се ухвати ХеигхтИсЗероЕкцептион.
- Крај блока за руковање изузецима.
- Паузирајте прозор конзоле чекајући да корисник нешто предузме да га затвори.
- Крај главног потпроцедура.
- Крај модула.
Бацање предмета
У руковању изузетцима, можете одабрати бацање предмета. Међутим, објекат мора бити изведен из система. Класа изузетака, директно или индиректно. На пример:
Корак 1) Направите нову конзолу.
Корак 2) Користите следећи код:
Module Module1Sub Main()TryThrow New ApplicationException("Throwing a custom exception")Catch ex As ExceptionConsole.WriteLine(ex.Message)FinallyConsole.WriteLine("The Finally Block")End TryConsole.ReadKey()End SubEnd Module
Корак 3) Кликните дугме Старт на горњој траци да бисте извршили код. Требали бисте добити следеће:
Ево снимка екрана кода:
Објашњење кода:
- Креирање модула под називом Модуле1.
- Почетак главног потпроцедура.
- Почетак кода за руковање грешкама.
- Бацање објекта изузетка. Овај код може генерисати изузетак, па смо га окружили блоком Три / Цатцх.
- Хватање изузетка као објекта ек ако линија баца изузетак.
- Штампање поруке о изузетку на конзоли у случају да се догоди.
- Блок Коначно за покретање без обзира је ли изузетак ухваћен или не.
- Порука за испис на конзоли када се изврши блок Коначно.
- Крај кода за руковање изузецима.
- Паузирајте конзолу неко време чекајући да корисник предузме мере да је затвори.
- Крај главног потпроцедура.
- Крај модула.
Резиме
- Изузетак се односи на проблем који се јавља током извршавања програма изазваног неочекиваном околношћу.
- Ако сумњате да ће неки код генерисати изузетак, окружите га блоком Три / Цатцх.
- Блок Коначно долази након блока Покушај / Ухвати и извршава без обзира је ли изузетак ухваћен или не.
- ВБ.НЕТ нам омогућава да креирамо прилагођене изузетке.