Hvad er en undtagelse?
En undtagelse henviser til et problem, der opstår under programudførelse. Det er forårsaget af en uventet omstændighed. Et godt eksempel er, når du udfører en delingshandling, og derefter deler du med nul (0). En undtagelse vil blive rejst.
I denne Visual Basic-selvstudie lærer du:
- Hvad er en undtagelse?
- Hvad er undtagelseshåndtering?
- Syntaks for Try / Catch
- Eksempel til håndtering af undtagelser
- Brugerdefinerede undtagelser
- Kaste objekter
Hvad er undtagelseshåndtering?
Med undtagelser kan du overføre styringen af et program fra en del til en anden. I VB.NET håndteres undtagelser ved hjælp af følgende 4 nøgleord:
Nøgleord | Detalje |
Prøve | Arbejdet med prøveblokken er at identificere den kodeblok, som en specifik undtagelse vil blive aktiveret for. Det skal følges af en fangstblok (er). |
Fangst | Fangst af undtagelsen sker i denne blok. Det er en undtagelsesbehandler, hvor undtagelsen håndteres. |
Langt om længe | Brug Endelig-blokken til at køre et sæt udsagn, om der er sket en undtagelse eller ej. |
Kaste | En undtagelse kastes efter forekomsten af et problem. Dette er arbejdet med Throw-nøgleordet. |
Syntaks for Try / Catch
Try / Catch-udsagnene tager syntaksen nedenfor:
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
Try / Catch-blokken skal omgive koden, der kan give en undtagelse. Denne kode er kendt som en beskyttet kode. Du kan bruge flere fangstopgørelser, når du har brug for at fange forskellige typer undtagelser.
Eksempel til håndtering af undtagelser
Med Try / Catch-udsagnene kan du adskille din almindelige programkode fra fejlhåndteringssystemet. Lad os demonstrere, hvordan vi håndterer en undtagelse ved hjælp af nøgleordene Prøv, Fang og Endelig.
Trin 1) Opret en ny konsolapplikation.
Trin 2) Brug denne kode:
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
Trin 3) Klik på Start-knappen fra værktøjslinjen for at udføre koden. Du skal få følgende output:
Her er et screenshot af koden:
Forklaring af kode:
- Oprettelse af et modul med navnet Module1.
- Oprettelse af en underprocedure med navnet divisionFunction med to heltalargumenter n1 og n2. ByVal er et VB.NET-nøgleord, der angiver, at værdierne for argumenterne overføres til værdi.
- Oprettelse af en heltalsvariabel med navnet svar.
- Start af Try / Catch-blokken. Vi er nødt til at omslutte den kode, som vi formoder, kan medføre en undtagelse med denne blok.
- Udførelse af en opdelingsoperation mellem værdierne for variabler n1 og n2. Resultatet af delingsoperationen tildeles det variable svar. Denne kode kan muligvis skabe en undtagelse, for eksempel når vi deler et tal med nul, og derfor har vi omgivet det med Try / Catch-blokke.
- Fange undtagelsen ved navn DivideByZeroException og tildele den genererede undtagelsesmeddelelse til exen.
- Udskrivning af tekst på konsollen for at underrette brugeren om typen / navnet på den undtagelse, der blev rejst.
- Den sidste blok. Dette udfører, om en undtagelse er fanget eller ej.
- Udskrivning af tekst på konsollen, der viser resultatet af delingsoperationen.
- Slutningen af prøveblokken, dvs. slutningen af fejlhåndteringskoden.
- Afslutning af divisionen Funktion underprocedure.
- Start af hovedunderproceduren.
- Opkald / påkaldelse af delFunktions underprocedure. Værdierne for de to heltalargumenter overføres her. Værdien af n1 = 4 og n2 = 0. Dette betyder, at delingsoperationen vil være 4 \ 0, det vil sige n1 \ n2.
- Sætter konsolvinduet på pause og venter på, at brugeren griber ind for at lukke det.
- Afslutning af hovedundersøgelsen.
- Slutningen af modulet.
Brugerdefinerede undtagelser
VB.NET giver dig mulighed for at definere dine egne undtagelser. Du kan hente brugerdefinerede undtagelsesklasser fra ApplicationException-klassen. Lad os demonstrere dette med et eksempel:
Trin 1) Opret en ny konsolapplikation.
Trin 2) Brug følgende kode:
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
Trin 3) Klik på Start-knappen fra den øverste bjælke for at udføre koden. Du skal få følgende output:
Her er et screenshot af koden:
Forklaring af kode:
- Oprettelse af et modul med navnet Module1.
- Oprettelse af en undtagelsesklasse ved navn HeightIsZeroException. Klassen arver alle ApplicationException-klassen.
- Oprettelse af en underprocedure med navnet Ny. Det tager et strengargument med navnet tekst.
- At kalde basisklassekonstruktøren og videregive det ovenstående argument.
- Afslutning på den nye underprocedure.
- Slutningen af klassen HeightIsZeroException.
- Oprettelse af en klasse ved navn Højde. Dens offentlige adgangsmodifikator er Offentlig, hvilket betyder, at det vil være offentligt tilgængeligt.
- Oprettelse af en heltalsvariabel med navnet Højde og initialisering af dens værdi til 0.
- Oprettelse af en underprocedure med navnet showHeight ().
- Kontrollerer, hvornår værdien af variablen Højde er 0. Vi har brugt tilstanden Hvis ... Så.
- At smide HeightIsZeroException, hvis ovenstående betingelse er sand. Meddelelsen Nul højde fundet vises, når denne undtagelse kastes.
- Den anden del, der skal udføres, når If-betingelsen ikke er sand.
- Besked til udskrivning på konsollen, der viser højden, når den ikke er 0.
- Slutningen af If-tilstanden.
- Slutningen af showHeight () underprocedure.
- Slutningen af klassen Højde.
- Start af hovedunderproceduren.
- Oprettelse af et objekt med navnet Højde som en forekomst af klassen Højde.
- Start af undtagelseshåndteringsblokken.
- Påkalder show-Height () underproceduren defineret i klassen Højde. Vi har brugt et objekt af denne klasse til at få adgang til denne metode. Denne linje kan resultere i en undtagelse. Derfor har vi omgivet det med en undtagelseshåndteringskode.
- Fangning af HeightIsZeroException-undtagelsen som objekt ex, hvis det sker.
- Beskeden, der skal udskrives på konsollen, når HeightIsZeroException er fanget.
- Slutningen af undtagelsesbehandlingsblokken.
- Sæt konsolvinduet på pause, mens du venter på, at en bruger skal gribe ind for at lukke det.
- Afslutning af hovedundersøgelsen.
- Slutningen af modulet.
Kaste objekter
I undtagelseshåndtering kan du vælge at smide et objekt. Objektet skal imidlertid stamme fra System. Undtagelsesklasse direkte eller indirekte. For eksempel:
Trin 1) Opret en ny konsolapplikation.
Trin 2) Brug følgende kode:
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
Trin 3) Klik på Start-knappen fra den øverste bjælke for at udføre koden. Du skal få følgende:
Her er et screenshot af koden:
Forklaring af kode:
- Oprettelse af et modul med navnet Module1.
- Start af hovedunderproceduren.
- Start af fejlhåndteringskoden.
- Kaste et undtagelsesobjekt. Denne kode kan generere en undtagelse, derfor har vi omgivet den med en Try / Catch-blok.
- Fange en undtagelse som objekt ex, hvis linjen kaster en undtagelse.
- Udskrivning af undtagelsesmeddelelsen på konsollen, hvis den opstår.
- Den sidste blok for at køre, om en undtagelse er fanget eller ej.
- Beskeden, der skal udskrives på konsollen, når Endelig-blokken udføres.
- Slutningen af undtagelseshåndteringskoden.
- Sæt konsollen på pause et stykke tid, mens du venter på, at en bruger griber ind for at lukke den.
- Afslutning af hovedundersøgelsen.
- Slutningen af modulet.
Resumé
- En undtagelse henviser til et problem, der opstår under programudførelse forårsaget af en uventet omstændighed.
- Hvis du har mistanke om, at en kode vil generere en undtagelse, skal du omgive den med en prøve / fangst-blok.
- Den sidste blok kommer efter Try / Catch-blokken og udfører, om en undtagelse er fanget eller ej.
- VB.NET giver os mulighed for at oprette brugerdefinerede undtagelser.