Čo je to výnimka?
Výnimka sa týka problému, ktorý sa vyskytne počas vykonávania programu. Je to spôsobené neočakávanou okolnosťou. Dobrým príkladom je, keď vykonávate operáciu delenia a potom ju vydelíte nulou (0). Bude nastolená výnimka.
V tomto výučbe jazyka Visual Basic sa dozviete:
- Čo je to výnimka?
- Čo je spracovanie výnimiek?
- Syntax Try / Catch
- Príklad na riešenie výnimiek
- Užívateľom definované výnimky
- Vrhanie predmetov
Čo je spracovanie výnimiek?
Až na výnimky môžete previesť kontrolu nad programom z jednej časti do druhej. Vo VB.NET sa výnimky vybavujú pomocou nasledujúcich 4 kľúčových slov:
Kľúčové slovo | Detail |
Vyskúšajte | Úlohou bloku Try je identifikovať blok kódu, pre ktorý sa aktivuje konkrétna výnimka. Za ním by mal nasledovať blokovací blok (bloky). |
Chytiť | Chytanie výnimky sa vykonáva v tomto bloku. Je to obslužný program výnimiek, v ktorom sa spracováva výnimka. |
Nakoniec | Pomocou bloku Nakoniec môžete spustiť skupinu príkazov, či už došlo k výnimke alebo nie. |
Hoď | Po výskyte problému sa vyvolá výnimka. Toto je práca kľúčového slova Hodiť. |
Syntax Try / Catch
Príkazy Try / Catch majú nasledujúcu syntax:
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
Blok Try / Catch by mal obklopovať kód, ktorý môže spôsobiť výnimku. Tento kód sa nazýva chránený kód. Ak potrebujete zachytiť rôzne typy výnimiek, môžete použiť viac príkazov na zachytenie.
Príklad na riešenie výnimiek
Pomocou príkazov Try / Catch môžete oddeliť bežný programový kód od systému na spracovanie chýb. Ukážme si, ako zvládnuť výnimku pomocou kľúčových slov Try, Catch a Finally.
Krok 1) Vytvorte novú konzolovú aplikáciu.
Krok 2) Použite tento kód:
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
Krok 3) Kliknite na tlačidlo Štart na paneli nástrojov a vykonajte kód. Mali by ste dostať nasledujúci výstup:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Vytvorenie modulu s názvom Module1.
- Vytvorenie pod procedúry s názvom divisionFunction s dvoma celočíselnými argumentmi n1 a n2. ByVal je kľúčové slovo VB.NET o tom, že hodnoty argumentov budú odovzdávané hodnotou.
- Vytvorenie celočíselnej premennej s názvom odpoveď.
- Začiatok bloku Try / Catch. Týmto blokom musíme obklopiť kód, o ktorom sa domnievame, že môže spôsobiť výnimku.
- Vykonanie operácie rozdelenia medzi hodnotami premenných n1 a n2. Výsledok operácie rozdelenia je priradený premennej odpovedi. Tento kód môže vyvolať výnimku, napríklad keď číslo vydelíme nulou, a preto sme ho obklopili blokmi Try / Catch.
- Chytanie výnimky s názvom DivideByZeroException a priradenie vygenerovanej správy o výnimke ex.
- Tlač nejakého textu na konzolu s cieľom upozorniť používateľa na typ / názov vyvolanej výnimky.
- Blok Konečne. Toto sa vykoná bez ohľadu na to, či je alebo nie je zachytená výnimka.
- Vytlačí sa na konzolu text zobrazujúci výsledok operácie rozdelenia.
- Koniec bloku Try, to znamená koniec kódu na spracovanie chýb.
- Koniec čiastkového postupu divízieFunkcia.
- Začiatok hlavného čiastkového postupu.
- Volanie / vyvolanie čiastkového postupu divisionFunction. Sem sa odovzdajú hodnoty dvoch celočíselných argumentov. Hodnota n1 = 4 an2 = 0. To znamená, že operácia delenia bude 4 \ 0, to znamená n1 \ n2.
- Pozastavenie okna konzoly a čakanie na používateľa, aby vykonal akciu na jeho zatvorenie.
- Koniec hlavného čiastkového postupu.
- Koniec modulu.
Užívateľom definované výnimky
VB.NET vám umožňuje definovať vaše vlastné výnimky. Používateľom definované triedy výnimiek môžete získať z triedy ApplicationException. Ukážme si to na príklade:
Krok 1) Vytvorte novú konzolovú aplikáciu.
Krok 2) Použite nasledujúci kód:
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
Krok 3) Kliknite na tlačidlo Štart v hornej lište a vykonajte kód. Mali by ste dostať nasledujúci výstup:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Vytvorenie modulu s názvom Module1.
- Vytvára sa trieda výnimiek s názvom HeightIsZeroException. Trieda dedí všetky triedy ApplicationException.
- Vytvára sa čiastkový postup s názvom Nový. Bude to trvať jeden reťazcový argument s názvom text.
- Volanie konštruktora základnej triedy a odovzdanie vyššie uvedeného argumentu.
- Koniec nového čiastkového postupu.
- Koniec triedy HeightIsZeroException.
- Vytvára sa trieda s názvom Výška. Jeho modifikátor verejného prístupu je Verejný, čo znamená, že bude verejne prístupný.
- Vytvorenie celočíselnej premennej s názvom Výška a inicializácia jej hodnoty na 0.
- Vytvorenie pod procedúry s názvom showHeight ().
- Kontroluje sa, či je hodnota premennej Výška 0. Použili sme podmienku If ... Then.
- Ak chcete splniť vyššie uvedenú podmienku, odhodí sa HeightIsZeroException. Keď sa vyvolá táto výnimka, zobrazí sa správa Nájdená nulová výška.
- Else časť, ktorá sa má vykonať, keď podmienka If nie je pravdivá.
- Správa na tlač na konzole, ktorá zobrazuje výšku, keď nie je 0.
- Koniec podmienky If.
- Koniec podprocesu showHeight ().
- Koniec triedy Výška.
- Začiatok hlavného čiastkového postupu.
- Vytvorenie objektu s názvom Výška ako inštancie triedy Výška.
- Začiatok bloku spracovania výnimiek.
- Vyvolanie čiastkového postupu showHeight () definovaného v triede Výška. Na prístup k tejto metóde sme použili objekt tejto triedy. Tento riadok môže mať za následok výnimku. Preto sme ho obklopili kódom na spracovanie výnimiek.
- Chytanie výnimky HeightIsZeroException ako objektu ex v prípade, že sa vyskytne.
- Správa, ktorá sa má vytlačiť na konzolu, keď sa zachytí HeightIsZeroException.
- Koniec bloku spracovania výnimiek.
- Pozastavte okno konzoly a počkajte, kým používateľ uzavrie akciu.
- Koniec hlavného čiastkového postupu.
- Koniec modulu.
Vrhanie predmetov
Pri spracovávaní výnimiek môžete zvoliť odhodenie objektu. Objekt však musí byť odvodený od systému. Trieda výnimiek, priamo alebo nepriamo. Napríklad:
Krok 1) Vytvorte novú konzolovú aplikáciu.
Krok 2) Použite nasledujúci kód:
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
Krok 3) Kliknite na tlačidlo Štart v hornej lište a vykonajte kód. Mali by ste dostať nasledujúce:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Vytvorenie modulu s názvom Module1.
- Začiatok hlavného čiastkového postupu.
- Začiatok kódu na spracovanie chýb.
- Hádzanie objektu výnimky. Tento kód môže generovať výnimku, preto sme ho obklopili blokom Try / Catch.
- Chytanie výnimky ako objektu ex, ak riadok vyvolá výnimku.
- Tlač správy o výnimke na konzole pre prípad, že k nej dôjde.
- Blok Finally na spustenie bez ohľadu na to, či sa výnimka zachytila alebo nie.
- Správa, ktorá sa má vytlačiť na konzolu, keď sa vykoná blok konečne.
- Koniec kódu na spracovanie výnimiek.
- Na chvíľu pozastavte konzolu a čakajte, kým používateľ uzavrie akciu.
- Koniec hlavného čiastkového postupu.
- Koniec modulu.
Zhrnutie
- Výnimka sa vzťahuje na problém, ktorý nastane počas vykonávania programu vyvolaný neočakávanou okolnosťou.
- Ak máte podozrenie, že nejaký kód vygeneruje výnimku, obklopte ho blokom Try / Catch.
- Blok Konečne nasleduje po bloku Try / Catch a vykoná, či sa výnimka zachytí alebo nie.
- VB.NET nám umožňuje vytvárať vlastné výnimky.