Što je iznimka?
Iznimka se odnosi na problem koji se javlja tijekom izvršavanja programa. Do njega dolazi neočekivanom okolnošću. Dobar je primjer kada izvodite operaciju podjele, a zatim dijelite s nulom (0). Podignut će se iznimka.
U ovom vodiču za Visual Basic naučit ćete:
- Što je iznimka?
- Što je rukovanje iznimkama?
- Sintaksa Try / Catch
- Primjer za rukovanje iznimkama
- Korisnički definirane iznimke
- Bacanje predmeta
Što je rukovanje iznimkama?
Uz iznimke, kontrolu programa možete prenijeti s jednog dijela na drugi. U VB.NET-u se s iznimkama rješava pomoću sljedeće 4 ključne riječi:
Ključna riječ | Detalj |
Probati | Rad bloka Try je identificiranje bloka koda za koji će se aktivirati određena iznimka. Nakon njega trebaju slijediti blokovi za ulov. |
Ulov | Hvatanje iznimke vrši se u ovom bloku. Riječ je o obrađivaču iznimki u kojem se obrađuje iznimka. |
Konačno | Upotrijebite blok Napokon za pokretanje skupa izjava bez obzira je li se dogodila iznimka ili ne. |
Bacanje | Iznimka se izbacuje nakon pojave problema. Ovo je djelo ključne riječi Throw. |
Sintaksa Try / Catch
Izjave Try / Catch uzimaju sintaksu navedenu u nastavku:
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 trebao bi okružiti kôd koji može stvoriti iznimku. Ovaj je kod poznat kao zaštićeni kôd. Možete koristiti više izjava catch kada trebate uhvatiti razne vrste izuzetaka.
Primjer za rukovanje iznimkama
Izjavama Try / Catch možete odvojiti svoj uobičajeni programski kod od Sustava za rukovanje pogreškama. Pokažimo nam kako se nositi s iznimkom pomoću ključnih riječi Try, Catch i Final.
Korak 1) Stvorite novu aplikaciju konzole.
Korak 2) Koristite ovaj kod:
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) Kliknite gumb Start na alatnoj traci da biste izvršili kôd. Trebali biste dobiti sljedeći izlaz:
Evo snimke zaslona koda:
Objašnjenje koda:
- Izrada modula pod nazivom Module1.
- Stvaranje potprocedure pod nazivom DivisionFunction s dva cjelobrojna argumenta n1 i n2. ByVal je ključna riječ VB.NET koja navodi da će se vrijednosti argumenata prenositi po vrijednosti.
- Stvaranje cjelobrojne varijable s imenom odgovor.
- Početak bloka Try / Catch. Moramo okružiti kod za koji sumnjamo da može stvoriti iznimku s ovim blokom.
- Izvođenje operacije podjele između vrijednosti varijabli n1 i n2. Rezultat operacije dijeljenja dodjeljuje se varijabli odgovor. Ovaj kôd može stvoriti iznimku, na primjer, kada broj podijelimo s nulom, stoga smo ga okružili blokovima Try / Catch.
- Hvatanje iznimke pod nazivom DivideByZeroException i dodjeljivanje generirane poruke o iznimci bivšoj.
- Ispis teksta na konzoli radi obavještavanja korisnika o vrsti / nazivu izuzeća koji je pokrenut.
- Blok Napokon. Ovo će izvršiti bez obzira je li iznimka uhvaćena ili ne.
- Ispis teksta na konzoli koji prikazuje rezultat operacije podjele.
- Kraj bloka Try, odnosno kraj koda za rukovanje pogreškama.
- Kraj podjelePostupak funkcije.
- Početak glavnog potprocedura.
- Pozivanje / pozivanje na podproceduciju DivisionFunction. Ovdje se prosljeđuju vrijednosti dvaju cjelobrojnih argumenata. Vrijednost n1 = 4 i n2 = 0. To znači da će operacija dijeljenja biti 4 \ 0, to jest n1 \ n2.
- Pauziranje prozora konzole čekajući da korisnik poduzme mjere za njegovo zatvaranje.
- Kraj glavnog potprocedura.
- Kraj modula.
Korisnički definirane iznimke
VB.NET vam omogućuje da definirate vlastite iznimke. Korisnički definirane klase izuzetaka možete dobiti iz klase ApplicationException. Pokažimo to na primjeru:
Korak 1) Stvorite novu aplikaciju konzole.
Korak 2) Upotrijebite sljedeći kod:
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) Kliknite gumb Start na gornjoj traci da biste izvršili kôd. Trebali biste dobiti sljedeći izlaz:
Evo snimke zaslona koda:
Objašnjenje koda:
- Izrada modula pod nazivom Module1.
- Stvaranje klase iznimke pod nazivom HeightIsZeroException. Klasa nasljeđuje sve klase ApplicationException.
- Stvaranje potprocedura pod nazivom Novo. Trebat će jedan argument u nizu s imenom text.
- Pozivanje konstruktora osnovne klase i prenošenje na njega gornjeg argumenta.
- Kraj novog potprocedura.
- Kraj klase HeightIsZeroException.
- Stvaranje razreda pod nazivom Visina. Njegov modifikator javnog pristupa je Public, što znači da će biti javno dostupan.
- Stvaranje cjelobrojne varijable pod nazivom Height i inicijalizacija njene vrijednosti na 0.
- Stvaranje potprocedura pod nazivom showHeight ().
- Provjeravamo kada je vrijednost varijable Height 0. Koristili smo uvjet If ... Then.
- Baciti HeightIsZeroException ako je gornji uvjet istinit. Poruka Zero Height Found bit će prikazana kada se izuzetak izbaci.
- Drugi dio koji će se izvršiti kada uvjet If nije istinit.
- Poruka za ispis na konzoli koja prikazuje visinu kada nije 0.
- Kraj uvjeta If.
- Kraj potprocedure showHeight ().
- Kraj razreda Visina.
- Početak glavnog potprocedura.
- Stvaranje objekta s imenom Visina kao primjer klase Visina.
- Početak bloka za rukovanje iznimkama.
- Pozivanje na potpostupak showHeight () definiran u klasi Height. Za pristup ovoj metodi koristili smo objekt ove klase. Ovaj redak može rezultirati iznimkom. Stoga smo ga okružili kodom za rukovanje iznimkama.
- Hvatanje iznimke HeightIsZeroException kao objekta ex u slučaju da se dogodi.
- Poruka za ispis na konzoli kada se uhvati HeightIsZeroException.
- Kraj bloka za rukovanje iznimkama.
- Pauzirajte prozor konzole čekajući da korisnik poduzme mjere za njegovo zatvaranje.
- Kraj glavnog potprocedura.
- Kraj modula.
Bacanje predmeta
U rukovanju iznimkama, možete odabrati bacanje predmeta. Međutim, objekt mora biti izveden iz sustava. Razred izuzeća, izravno ili neizravno. Na primjer:
Korak 1) Stvorite novu aplikaciju konzole.
Korak 2) Upotrijebite sljedeći kod:
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) Kliknite gumb Start na gornjoj traci da biste izvršili kôd. Trebali biste dobiti sljedeće:
Evo snimke zaslona koda:
Objašnjenje koda:
- Izrada modula pod nazivom Module1.
- Početak glavnog potprocedura.
- Početak koda za rukovanje pogreškama.
- Bacanje objekta iznimke. Ovaj kôd može generirati iznimku, stoga smo ga okružili blokom Try / Catch.
- Hvatanje iznimke kao objekta ex ako linija baca iznimku.
- Ispis poruke o iznimci na konzoli u slučaju da se dogodi.
- Blok Napokon za pokretanje je li uhvaćena iznimka ili ne.
- Poruka za ispis na konzoli kada se izvrši blok Napokon.
- Kraj koda za rukovanje iznimkama.
- Pauzirajte konzolu neko vrijeme čekajući da korisnik poduzme mjere za njezino zatvaranje.
- Kraj glavnog potprocedura.
- Kraj modula.
Sažetak
- Iznimka se odnosi na problem koji se javlja tijekom izvođenja programa do kojeg dolazi zbog neočekivane okolnosti.
- Ako sumnjate da će neki kôd generirati iznimku, okružite ga blokom Try / Catch.
- Blok Final dolazi nakon bloka Try / Catch i izvršava bez obzira je li iznimka uhvaćena ili ne.
- VB.NET nam omogućuje stvaranje prilagođenih izuzetaka.