Mi az a kivétel?
Kivétel a program végrehajtása során felmerülő problémára utal. Váratlan körülmény idézi elő. Jó példa erre, ha osztási műveletet hajt végre, majd elosztja nullával (0). Kivételt vetnek fel.
Ebben a Visual Basic oktatóanyagban megtudhatja:
- Mi az a kivétel?
- Mi az a kivételkezelés?
- A Try / Catch szintaxisa
- Példa a kivételek kezelésére
- Felhasználó által definiált kivételek
- Tárgyak dobása
Mi az a kivételkezelés?
Kivételtől eltekintve áthelyezheti a program vezérlését egyik részről a másikra. A VB.NET-ben a kivételeket a következő 4 kulcsszóval kezelik:
Kulcsszó | Részlet |
Próbáld ki | A Try blokk feladata annak a kódblokknak az azonosítása, amelyre egy adott kivétel aktiválódik. Ezt egy elkapási blokk (ok) követi. |
Fogás | A Kivétel befogása ebben a blokkban történik. Ez egy kivételkezelő, amelyben a Kivételt kezelik. |
Végül | Az Utolsó blokk segítségével futtathat egy állításkészletet, függetlenül attól, hogy történt-e kivétel. |
Dobás | A probléma előfordulása után kivételt hoznak. Ez a Dobás kulcsszó munkája. |
A Try / Catch szintaxisa
A Try / Catch utasítások az alábbi szintaxist adják:
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
A Try / Catch blokknak körül kell vennie a kódot, amely kivételt jelenthet. Ez a kód védett kód néven ismert. Akkor használhat több fogási utasítást, ha különféle típusú kivételeket kell elkapnia.
Példa a kivételek kezelésére
A Try / Catch utasításokkal elválaszthatja a szokásos programkódot a hibakezelő rendszertől. Bemutassuk, hogyan kell kezelni a kivételt a Try, a Catch és a Last kulcsszavak segítségével.
1. lépés: Hozzon létre egy új konzolalkalmazást.
2. lépés : Használja ezt a kódot:
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. lépés) Kattintson a Start gombra az eszköztáron a kód végrehajtásához. A következő kimenetet kell kapnia:
Itt van egy képernyőkép a kódról:
A kód magyarázata:
- Modul1 nevű modul létrehozása.
- A DivisionFunction nevű aleljárás létrehozása két egész n1 és n2 argumentummal. A ByVal egy VB.NET kulcsszó, amely azt állítja, hogy az argumentumok értékei érték szerint kerülnek átadásra.
- Válasz nevű egész változó létrehozása.
- A Try / Catch blokk kezdete. Körbe kell vennünk a kódot, amelyről feltételezhetjük, hogy kivételt jelenthet ezzel a blokkkal.
- Osztási művelet végrehajtása az n1 és n2 változók értékei között. Az osztási művelet eredményét a változó válaszhoz rendeljük. Ez a kód kivételt vethet fel, például ha egy számot nullával osztunk el, ezért körülvettük a Try / Catch blokkokkal.
- A DivideByZeroException nevű kivétel elkapása és a létrehozott kivételüzenet hozzárendelése az ex-hez.
- Nyomtat néhány szöveget a konzolra, hogy értesítse a felhasználót a felvetett kivétel típusáról / nevéről.
- Az utolsó blokk. Ez végrehajtja, hogy van-e kivétel vagy sem.
- Nyomtat néhány szöveget a konzolra, amely megmutatja az osztási művelet eredményét.
- A Try blokk vége, vagyis a hibakezelő kód vége.
- A DivisionFunction alfolyamat vége.
- A fő eljárás megkezdése.
- A divízióFunction aleljárás hívása / meghívása. A két egész argumentum értékeit itt adjuk át. N1 = 4 és n2 = 0 értéke. Ez azt jelenti, hogy az osztási művelet 4 \ 0 lesz, azaz n1 \ n2.
- A konzolablak szüneteltetése arra vár, hogy a felhasználó tegyen lépéseket annak bezárására.
- A fő aleljárás vége.
- A modul vége.
Felhasználó által definiált kivételek
A VB.NET lehetővé teszi, hogy meghatározza saját kivételeit. Felhasználó által definiált kivételosztályokat az ApplicationException osztályból szerezhet be. Bemutassuk ezt egy példával:
1. lépés: Hozzon létre egy új konzolalkalmazást.
2. lépés : Használja a következő kódot:
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. lépés) Kattintson a Start gombra a felső sávon a kód végrehajtásához. A következő kimenetet kell kapnia:
Itt van egy képernyőkép a kódról:
A kód magyarázata:
- Modul1 nevű modul létrehozása.
- HeightIsZeroException nevű kivételosztály létrehozása. Az osztály az összes ApplicationException osztályt örökli.
- Új nevű aleljárás létrehozása. Ehhez egy karakterlánc argumentum kell, amelynek neve szöveg.
- Az alaposztály konstruktorának meghívása és a fenti argumentum átadása.
- Az új aleljárás vége.
- A HeightIsZeroException osztály vége.
- Magasság nevű osztály létrehozása. Nyilvános hozzáférés-módosítója Nyilvános, vagyis nyilvánosan elérhető lesz.
- Magasság nevű egész változó létrehozása és 0-ra való inicializálása.
- A showHeight () nevű aleljárás létrehozása.
- Annak ellenőrzése, hogy a Magasság változó értéke 0. Ha az If… Akkor feltételt használtuk.
- A HeightIsZeroException dobása, ha a fenti feltétel igaz. A Zero Height Found üzenet jelenik meg, amikor ezt a kivételt eldobja.
- A Másik rész végrehajtandó, ha az If feltétel nem igaz.
- A konzolra nyomtatandó üzenet, amely a Magasságot mutatja, ha az nem 0.
- Az If feltétel vége.
- A showHeight () alfolyamat vége.
- Az osztály vége Magasság.
- A fő eljárás megkezdése.
- A Height nevű objektum létrehozása a Height osztály példányaként.
- A kivételkezelő blokk kezdete.
- A Height osztályban definiált showHeight () al eljárás meghívása. Ehhez az osztályhoz tartozó objektumokat használtunk a módszer eléréséhez. Ez a sor kivételt eredményezhet. Ezért kivételkezelő kóddal vettük körül.
- A HeightIsZeroException kivétel kivétele objektumként ex, ha előfordul.
- A konzolra nyomtatandó üzenet, amikor a HeightIsZeroException befogásra kerül.
- A kivételkezelő blokk vége.
- Szüneteltesse a konzolablak megvárását, amíg a felhasználó megteszi a műveletet annak bezárása érdekében.
- A fő aleljárás vége.
- A modul vége.
Tárgyak dobása
Kivételes kezelés esetén kiválaszthat egy tárgyat. Az objektumnak azonban a System-ből kell származnia. Kivételosztály, közvetlenül vagy közvetve. Például:
1. lépés: Hozzon létre egy új konzolalkalmazást.
2. lépés : Használja a következő kódot:
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. lépés) Kattintson a Start gombra a felső sávon a kód végrehajtásához. A következőket kell kapnia:
Itt van egy képernyőkép a kódról:
A kód magyarázata:
- Modul1 nevű modul létrehozása.
- A fő eljárás megkezdése.
- A hibakezelő kód kezdete.
- Kivételes tárgy dobása. Ez a kód kivételt generálhat, ezért egy Try / Catch blokkkal vettük körül.
- Kivétel befogása objektumként ex, ha a sor kivételt dob.
- A kivételüzenet kinyomtatása a konzolra, ha előfordul.
- Az Utolsó blokk futtatásához, függetlenül attól, hogy van-e kivétel.
- A konzolra nyomtatandó üzenet a Végső blokk végrehajtásakor.
- A kivételkezelő kód vége.
- Szüneteltesse egy ideig a konzolt, és várja meg, amíg a felhasználó megteszi a műveletet a bezárása érdekében.
- A fő aleljárás vége.
- A modul vége.
Összegzés
- Kivétel a program végrehajtása során felmerülő problémára utal, amelyet váratlan körülmény okozott.
- Ha gyanítja, hogy valamilyen kód kivételt generál, vegye körül egy Try / Catch blokkkal.
- Az Utolsó blokk a Try / Catch blokk után következik, és végrehajtja, hogy van-e kivétel kivétel.
- A VB.NET lehetővé teszi számunkra, hogy egyedi kivételeket hozzunk létre.