Kaj je izjema?
Izjema se nanaša na težavo, ki se pojavi med izvajanjem programa. Vzrok je nepričakovana okoliščina. Dober primer je, ko izvajate operacijo delitve in nato delite z nič (0). Pojavila se bo izjema.
V tej vadnici Visual Basic boste izvedeli:
- Kaj je izjema?
- Kaj je obravnava izjem?
- Sintaksa poskusa / ulova
- Primer obravnave izjem
- Uporabniško določene izjeme
- Metanje predmetov
Kaj je obravnava izjem?
Z izjemami lahko nadzor nad programom prenesete iz enega dela v drugega. V VB.NET se izjeme obravnavajo z uporabo naslednjih 4 ključnih besed:
Ključna beseda | Podrobnosti |
Poskusi | Delo bloka Poskusi je določiti kodni blok, za katerega bo aktivirana posebna izjema. Temu naj sledi blok (-i) za ulov. |
Ujemite | V tem bloku se izvede izjema. Je obravnavalec izjem, v katerem se obravnava izjema. |
Končno | Z blokom Končno zaženite nabor stavkov, ne glede na to, ali je prišlo do izjeme ali ne. |
Vrzi | Izjema se vrne po pojavu težave. To je delo ključne besede Throw. |
Sintaksa poskusa / ulova
Izjave Try / Catch imajo spodnjo sintakso:
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 mora obkrožati kodo, ki lahko povzroči izjemo. Ta koda je znana kot zaščitena koda. Če želite ujeti različne vrste izjem, lahko uporabite več stavkov catch.
Primer obravnave izjem
Z izjavami Try / Catch lahko svojo običajno programsko kodo ločite od sistema za obdelavo napak. Pokažimo, kako ravnati z izjemo s ključnimi besedami Poskusi, Ujeli in Končno.
Korak 1) Ustvarite novo konzolo.
2. korak) Uporabite to kodo:
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
Korak 3) Za zagon kode v orodni vrstici kliknite gumb Start. Dobili bi naslednji izhod:
Tu je posnetek zaslona kode:
Pojasnilo kode:
- Ustvarjanje modula z imenom Module1.
- Ustvarjanje podprocedure z imenom DivisionFunction z dvema celoštevilčnima argumentoma n1 in n2. ByVal je ključna beseda VB.NET, ki navaja, da bodo vrednosti argumentov posredovane po vrednosti.
- Ustvarjanje celoštevilčne spremenljivke z imenom odgovor.
- Začetek bloka Try / Catch. S tem blokom moramo obkrožiti kodo, za katero sumimo, da lahko povzroči izjemo.
- Izvedba delitve med vrednostmi spremenljivk n1 in n2. Rezultat delitve je dodeljen spremenljivki odgovor. Ta koda lahko povzroči izjemo, na primer, ko delimo število z ničlo, zato smo ga obdali z bloki Try / Catch.
- Zajemanje izjeme z imenom DivideByZeroException in dodeljevanje ustvarjenega sporočila o izjemi ex.
- Tiskanje besedila na konzoli, da uporabnika obvestite o vrsti / imenu izjeme, ki je bila sprožena.
- Blok Končno. S tem boste izvedli, ali je izjema ujeta ali ne.
- Tiskanje nekaj besedila na konzoli, ki prikazuje rezultat operacije delitve.
- Konec bloka Try, to je konec kode za obdelavo napak.
- Konec delitve Funkcijski podproces.
- Začetek glavnega podprocedura.
- Klicanje / klicanje podprocedukcije DivisionFunction. Vrednosti dveh celoštevilnih argumentov so tu posredovane. Vrednost n1 = 4 in n2 = 0. To pomeni, da bo operacija delitve 4 \ 0, to je n1 \ n2.
- Začasno ustavite okno konzole in počakajte, da uporabnik ukrepa, da ga zapre.
- Konec glavnega podprocedura.
- Konec modula.
Uporabniško določene izjeme
VB.NET vam omogoča, da določite svoje izjeme. Uporabniško določene razrede izjem lahko dobite iz razreda ApplicationException. Pokažimo to na primeru:
Korak 1) Ustvarite novo konzolo.
Korak 2) Uporabite naslednjo kodo:
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
Korak 3) Za zagon kode kliknite gumb Start v zgornji vrstici. Dobili bi naslednji izhod:
Tu je posnetek zaslona kode:
Pojasnilo kode:
- Ustvarjanje modula z imenom Module1.
- Ustvarjanje razreda izjem z imenom HeightIsZeroException. Razred podeduje ves razred ApplicationException.
- Ustvarjanje podprocedure z imenom Novo. Potreben bo en niz argumentov z imenom besedilo.
- Pokliče konstruktor osnovnega razreda in mu posreduje zgornji argument.
- Konec novega podprocedura.
- Konec razreda HeightIsZeroException.
- Ustvarjanje predavanja z imenom Višina. Njegov modifikator javnega dostopa je Public, kar pomeni, da bo javno dostopen.
- Ustvarjanje celoštevilčne spremenljivke z imenom Višina in inicializacija njene vrednosti na 0.
- Ustvarjanje podprocedure z imenom showHeight ().
- Preverjanje, kdaj je vrednost spremenljivke Height 0. Uporabili smo pogoj Če ... Potem.
- Vrzite HeightIsZeroException, če je zgornji pogoj resničen. Ko vrnete to izjemo, se prikaže sporočilo Zero Height Found.
- Drugi del, ki se izvede, če pogoj If ne drži.
- Sporočilo za tiskanje na konzoli s prikazom višine, ko ni 0.
- Konec pogoja If.
- Konec podhoda showHeight ().
- Konec razreda Višina.
- Začetek glavnega podprocedura.
- Ustvarjanje predmeta z imenom Height kot primerek razreda Height.
- Začetek bloka za obravnavo izjem.
- Klicanje podprocedure showHeight (), definirane v razredu Height. Za dostop do te metode smo uporabili objekt tega razreda. Ta vrstica lahko povzroči izjemo. Zato smo ga obdali s kodo za obdelavo izjem.
- Ujemanje izjeme HeightIsZeroException kot predmeta ex, če se pojavi.
- Sporočilo za tiskanje na konzoli, ko je ujet HeightIsZeroException.
- Konec bloka za obdelavo izjem.
- Zaustavite okno konzole, ki čaka, da uporabnik ukrepa, da ga zapre.
- Konec glavnega podprocedura.
- Konec modula.
Metanje predmetov
Pri ravnanju z izjemami lahko izberete metanje predmeta. Vendar mora biti objekt izpeljan iz sistema. Razred izjem, posredno ali neposredno. Na primer:
Korak 1) Ustvarite novo konzolo.
Korak 2) Uporabite naslednjo kodo:
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
Korak 3) Za zagon kode kliknite gumb Start v zgornji vrstici. Morali bi dobiti naslednje:
Tu je posnetek zaslona kode:
Pojasnilo kode:
- Ustvarjanje modula z imenom Module1.
- Začetek glavnega podprocedura.
- Začetek kode za obdelavo napak.
- Metanje predmeta izjeme. Ta koda lahko ustvari izjemo, zato smo jo obdali z blokom Try / Catch.
- Ujemanje izjeme kot predmeta ex, če vrstica vrže izjemo.
- Tiskanje sporočila o izjemi na konzolo, če se pojavi.
- Blok Končno za zagon, ali je izjema ujeta ali ne.
- Sporočilo za tiskanje na konzoli, ko se izvede blok Končno.
- Konec kode za obdelavo izjem.
- Začasno ustavite konzolo in počakajte, da uporabnik ukrepa, da jo zapre.
- Konec glavnega podprocedura.
- Konec modula.
Povzetek
- Izjema se nanaša na težavo, ki nastane med izvajanjem programa zaradi nepričakovane okoliščine.
- Če sumite, da bo neka koda ustvarila izjemo, jo obkrožite z blokom Try / Catch.
- Blok Končno pride za blokom Poskusi / ulovi in izvede, ali je izjema ujeta ali ne.
- VB.NET nam omogoča ustvarjanje izjem po meri.