Co je to výjimka?
Výjimka odkazuje na problém, který nastane během provádění programu. Je to způsobeno neočekávanou okolností. Dobrým příkladem je, když provádíte operaci dělení a poté ji vydělíte nulou (0). Bude vyvolána výjimka.
V tomto kurzu jazyka Visual Basic se naučíte:
- Co je to výjimka?
- Co je zpracování výjimek?
- Syntaxe Try / Catch
- Příklad zpracování výjimek
- Uživatelem definované výjimky
- Házení předmětů
Co je zpracování výjimek?
Až na výjimky můžete převést ovládání programu z jedné části do druhé. Ve VB.NET jsou výjimky zpracovávány pomocí následujících 4 klíčových slov:
Klíčové slovo | Detail |
Snaž se | Úkolem bloku Try je identifikovat blok kódu, pro který bude aktivována konkrétní výjimka. Za ním by měl následovat blokovací blok. |
Úlovek | Chytání výjimky se provádí v tomto bloku. Je to obslužná rutina výjimky, ve které je zpracována výjimka. |
Konečně | Pomocí bloku Konečně spusťte sadu příkazů bez ohledu na to, zda došlo k výjimce. |
Házet | Po výskytu problému je vyvolána výjimka. Toto je práce klíčového slova Throw. |
Syntaxe Try / Catch
Příkazy Try / Catch mají níže uvedenou syntaxi:
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 měl obklopovat kód, který může vyvolat výjimku. Tento kód je znám jako chráněný kód. Pokud potřebujete zachytit různé typy výjimek, můžete použít několik příkazů catch.
Příklad zpracování výjimek
Pomocí příkazů Try / Catch můžete oddělit svůj běžný programový kód od systému pro zpracování chyb. Ukážeme, jak zpracovat výjimku pomocí klíčových slov Try, Catch a Finally.
Krok 1) Vytvořte novou konzolovou aplikaci.
Krok 2) Použijte 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) Klepnutím na tlačítko Start na panelu nástrojů spustíte kód. Měli byste získat následující výstup:
Zde je snímek obrazovky s kódem:
Vysvětlení kódu:
- Vytváření modulu s názvem Module1.
- Vytvoření dílčího postupu s názvem divisionFunction se dvěma celočíselnými argumenty n1 a n2. ByVal je klíčové slovo VB.NET o tom, že hodnoty argumentů budou předány hodnotou.
- Vytváření celočíselné proměnné s názvem odpověď.
- Začátek bloku Try / Catch. Musíme obklopit kód, o kterém se domníváme, že může tímto blokem vyvolat výjimku.
- Provádění operace dělení mezi hodnotami proměnných n1 a n2. Výsledek operace dělení je přiřazen proměnné odpovědi. Tento kód může vyvolat výjimku, například když vydělíme číslo nulou, proto jsme jej obklopili bloky Try / Catch.
- Chytání výjimky s názvem DivideByZeroException a přiřazení vygenerované zprávy o výjimce ex.
- Tisk nějakého textu na konzoli, který uživatele upozorní na typ / název výjimky, která byla vyvolána.
- Blok Konečně. Tím se provede, zda je výjimka zachycena nebo ne.
- Tisk textu na konzoli zobrazující výsledek operace dělení.
- Konec bloku Try, to znamená konec kódu pro zpracování chyb.
- Konec dílčího postupu divizeFunkce.
- Zahájení hlavního dílčího postupu.
- Volání / vyvolání dílčího postupu divisionFunction. Zde se předávají hodnoty dvou celočíselných argumentů. Hodnota n1 = 4 an2 = 0. To znamená, že operace dělení bude 4 \ 0, tj. N1 \ n2.
- Pozastavení okna konzoly a čekání, až uživatel zavře okno.
- Konec hlavního dílčího postupu.
- Konec modulu.
Uživatelem definované výjimky
VB.NET vám umožňuje definovat vlastní výjimky. Uživatelem definované třídy výjimek můžete získat z třídy ApplicationException. Ukážeme to na příkladu:
Krok 1) Vytvořte novou konzolovou aplikaci.
Krok 2) Použijte následující 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) Klepnutím na tlačítko Start na horní liště spustíte kód. Měli byste získat následující výstup:
Zde je snímek obrazovky s kódem:
Vysvětlení kódu:
- Vytváření modulu s názvem Module1.
- Vytváření třídy výjimek s názvem HeightIsZeroException. Třída dědí všechny třídy ApplicationException.
- Vytvoření dílčího postupu s názvem Nový. Bude to trvat jeden řetězcový argument s názvem text.
- Volání konstruktoru základní třídy a předání výše uvedeného argumentu.
- Konec nového dílčího postupu.
- Konec třídy HeightIsZeroException.
- Vytváření třídy s názvem Výška. Jeho modifikátor veřejného přístupu je Public, což znamená, že bude veřejně přístupný.
- Vytvoření celočíselné proměnné s názvem Výška a inicializace její hodnoty na 0.
- Vytvoření dílčího postupu s názvem showHeight ().
- Kontrola, když je hodnota proměnné Výška 0. Použili jsme podmínku If… Then.
- Vyhodit HeightIsZeroException, pokud je splněna výše uvedená podmínka. Při vyvolání této výjimky se zobrazí zpráva Nalezena nulová výška.
- Část Else, která se má provést, pokud podmínka If není pravdivá.
- Zpráva k tisku na konzole zobrazující Výška, pokud není 0.
- Konec podmínky If.
- Konec podprocesu showHeight ().
- Konec třídy Výška.
- Zahájení hlavního dílčího postupu.
- Vytvoření objektu s názvem Výška jako instance třídy Výška.
- Začátek bloku zpracování výjimek.
- Vyvolání dílčího postupu showHeight () definovaného ve třídě Height. Pro přístup k této metodě jsme použili objekt této třídy. Tento řádek může mít za následek výjimku. Proto jsme jej obklopili kódem pro zpracování výjimek.
- Chytání výjimky HeightIsZeroException jako objektu ex v případě, že k němu dojde.
- Zpráva, která se má vytisknout na konzole, když je chycena HeightIsZeroException.
- Konec bloku zpracování výjimek.
- Pozastavte okno konzoly a čekejte, až uživatel zavře okno.
- Konec hlavního dílčího postupu.
- Konec modulu.
Házení předmětů
Při zpracování výjimek můžete zvolit vyhodit objekt. Objekt však musí být odvozen ze systému. Třída výjimek, přímo nebo nepřímo. Například:
Krok 1) Vytvořte novou konzolovou aplikaci.
Krok 2) Použijte následující 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) Klepnutím na tlačítko Start na horní liště spustíte kód. Měli byste získat následující:
Zde je snímek obrazovky s kódem:
Vysvětlení kódu:
- Vytváření modulu s názvem Module1.
- Zahájení hlavního dílčího postupu.
- Začátek kódu pro zpracování chyb.
- Vyhodit objekt výjimky. Tento kód může generovat výjimku, proto jsme jej obklopili blokem Try / Catch.
- Chytání výjimky jako objektu ex, pokud řádek vyvolá výjimku.
- Tisk zprávy o výjimce na konzoli pro případ, že k ní dojde.
- Blok Finally ke spuštění, zda je výjimka zachycena nebo ne.
- Zpráva, která se má vytisknout na konzole, když se provede blok Konečně.
- Konec zpracování kódu výjimky.
- Pozastavte konzolu na chvíli a čekejte, až uživatel zavře akci.
- Konec hlavního dílčího postupu.
- Konec modulu.
souhrn
- Výjimka odkazuje na problém, který nastane během provádění programu způsobeného neočekávanou okolností.
- Pokud máte podezření, že nějaký kód vygeneruje výjimku, obklopte jej blokem Try / Catch.
- Blok Konečně přichází po bloku Try / Catch a provede, zda je výjimka chycena nebo ne.
- VB.NET nám umožňuje vytvářet vlastní výjimky.