Obrada iznimki u VB.Net-u (Try Catch)

⚡ Pametni sažetak

Obrada iznimaka u VB.Net-u upravlja greškama tijekom izvođenja, poput dijeljenja s nulom, koristeći ključne riječi Try, Catch, Finally i Throw kako bi program mogao elegantno reagirati na probleme umjesto da se ruši tijekom izvršavanja.

  • 🔍 iznimka: Problem koji se javlja tijekom izvršavanja, na primjer dijeljenje broja s nulom.
  • 🛡️ Pokušaj i uhvati: Try obavija rizični kod; Catch obrađuje iznimku koju podiže.
  • ✅ Konačno: Blok Finally se izvršava bez obzira na to da li se dogodi iznimka ili ne.
  • 🚦 Bacanje: Throw podiže objekt iznimke izveden iz klase System.Exception.
  • 🧩 Prilagođene iznimke: Nasljedite ApplicationException kako biste definirali vlastite tipove iznimaka.
  • 🤖 Pomoć umjetne inteligencije: GitHub Copilot i IntelliCode generiraj blokove Try Catch dok tipkaš.

Obrada iznimki u VB.Net-u

Što je iznimka u VB.Netu?

An izuzetak u VB.Netu se odnosi na problem koji se javlja tijekom izvođenja programa. Do njega je dovela neočekivana okolnost. Dobar primjer je kada izvodite operaciju dijeljenja, a zatim dijelite s nulom (0). Postavit će se iznimka.

Što je rukovanje iznimkama u VB.Netu?

Uz iznimke u VB.Net, možete prenijeti kontrolu nad programom s jednog dijela na drugi. U VB.Netu, iznimke se rješavaju pomoću sljedeće 4 ključne riječi:

Riječ Detalji
Pokušati Rad bloka Try je identificirati blok koda za koji će se aktivirati određena iznimka. Trebao bi ga pratiti catch blok(ovi).
Ulov Hvatanje iznimke vrši se u ovom bloku. To je rukovatelj iznimkom u kojem se rukuje iznimkom.
Konačno Upotrijebite blok Finally za pokretanje skupa naredbi bez obzira je li došlo do iznimke ili ne.
Baciti Iznimka se izbacuje nakon pojave problema. Ovo je rad ključne riječi Throw.

Nakon što su uloge ove četiri ključne riječi jasne, razmotrimo kako se one kombiniraju unutar jedne izjave.

Sintaksa Try Catch u VB.Netu

Naredbe Try Catch u VB.Netu definirane su pomoću donje sintakse:

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živati ​​kôd koji može izazvati iznimku. Ovaj kod je poznat kao zaštićeni kod. Možete koristiti više catch naredbi kada trebate uhvatiti različite vrste iznimaka.

Primjer rukovanja iznimkama u VB.Netu s Try Catch i Finally

Pomoću naredbi Try/Catch možete odvojiti svoj obični programski kod od sustava za obradu grešaka. Demonstrirajmo kako obraditi iznimku pomoću ključnih riječi Try, Catch i Finally.

Korak 1) Napravite novu konzolnu aplikaciju.

Korak 2) Upotrijebite ovaj kôd:

Module Module1
    Sub divisionFunction(ByVal n1 As Integer, ByVal n2 As Integer)
        Dim answer As Integer
        Try
            answer = n1 \ n2
        Catch ex As DivideByZeroException
            Console.WriteLine("Exception: {0}", ex)
        Finally
            Console.WriteLine("Answer is: {0}", answer)
        End Try
    End Sub
    Sub Main()
        divisionFunction(4, 0)
        Console.ReadKey()
    End Sub

End Module

Korak 3) Pritisnite gumb Start na alatnoj traci za izvršenje koda. Trebali biste dobiti sljedeći izlaz:

Izlaz konzole VB.Net Try Catch Finally koji prikazuje uhvaćenu iznimku DivideByZeroException

Evo snimke zaslona koda:

Primjer koda VB.Net Try Catch Finally prikazan u Visual Studiju

Objašnjenje Code:

  1. Stvaranje modula pod nazivom Module1.
  2. Stvaranje podprocedure pod nazivom divisionFunction s dva cjelobrojna argumenta n1 i n2. ByVal je VB.Net ključna riječ koja navodi da će vrijednosti argumenata biti proslijeđene prema vrijednosti.
  3. Stvaranje cjelobrojne varijable pod nazivom odgovor.
  4. Početak bloka Try/Catch. Ovim blokom moramo okružiti kod za koji sumnjamo da bi mogao pokrenuti iznimku.
  5. Izvođenje operacije dijeljenja između vrijednosti varijabli n1 i n2. Rezultat operacije dijeljenja pridružuje se varijabli odgovor. Ovaj kod može pokrenuti iznimku, na primjer, kada dijelimo broj s nulom, stoga smo ga okružili blokovima Try/Catch.
  6. Hvatanje iznimke pod nazivom DivideByZeroException i dodjeljivanje generirane poruke o iznimci ex.
  7. Ispisivanje nekog teksta na konzoli za obavještavanje korisnika o vrsti/nazivu iznimke koja je pokrenuta.
  8. Blok Finally. Ovo će se izvršiti neovisno o tome je li izuzetak uhvaćen ili ne.
  9. Ispis teksta na konzoli koji prikazuje rezultat operacije dijeljenja.
  10. Kraj bloka Try, odnosno kraj koda za obradu grešaka.
  11. Kraj podpostupka divisionFunction.
  12. Početak glavnog podpostupka.
  13. Pozivanje/pozivanje podprocedure 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, odnosno n1\n2.
  14. Pauziranje prozora konzole čekajući da korisnik poduzme akciju da ga zatvori.
  15. Kraj glavnog podpostupka.
  16. Kraj modula.

Korisnički definirane iznimke u VB.Netu

VB.Net vam omogućuje definiranje vlastitih iznimaka. Korisnički definirane klase iznimaka možete dobiti iz klase ApplicationException. Demonstrirajmo to na primjeru:

Primjer korisnički definirane iznimke u VB.Netu

Evo primjera korisnički definirane iznimke u VB.Net-u:

Korak 1) Napravite novu konzolnu aplikaciju.

Korak 2) Koristite sljedeći kôd:

Module Module1

    Public Class HeightIsZeroException : Inherits ApplicationException
        Public Sub New(ByVal text As String)
            MyBase.New(text)
        End Sub
    End Class
    Public Class Height
        Dim height As Integer = 0
        Sub showHeight()
            If (height = 0) Then
                Throw (New HeightIsZeroException("Zero Height found"))
            Else
                Console.WriteLine("Height is: {0}", height)
            End If
        End Sub
    End Class
    Sub Main()
        Dim hght As Height = New Height()
        Try
            hght.showHeight()
        Catch ex As HeightIsZeroException
            Console.WriteLine("HeightIsZeroException: {0}", ex.Message)
        End Try
        Console.ReadKey()
    End Sub

End Module

Korak 3) Pritisnite gumb Start na gornjoj traci da biste izvršili kod. Trebali biste dobiti sljedeći izlaz:

VB.Net korisnički definirana poruka HeightIsZeroException ispisana na konzoli

Evo snimke zaslona koda:

Primjer koda korisnički definirane klase iznimki VB.Net u Visual Studiju

Objašnjenje Code:

  1. Stvaranje modula pod nazivom Module1.
  2. Stvaranje klase iznimke pod nazivom HeightIsZeroException. Klasa nasljeđuje sve klase ApplicationException.
  3. Stvaranje potprocedure pod nazivom New. Trebat će jedan argument niza pod nazivom text.
  4. Pozivanje konstruktora osnovne klase i prosljeđivanje gornjeg argumenta.
  5. Kraj novog podpostupka.
  6. Kraj HeightIsZeroException klase.
  7. Stvaranje klase pod nazivom Visina. Njegov modifikator javnog pristupa je Public, što znači da će biti javno dostupan.
  8. Stvaranje cjelobrojne varijable pod nazivom Height i inicijalizacija njezine vrijednosti na 0.
  9. Stvaranje potprocedure pod nazivom showHeight().
  10. Provjera kada je vrijednost varijable Visina 0. Koristili smo uvjet If…Then.
  11. Izbaciti HeightIsZeroException ako je gornji uvjet istinit. Poruka Zero Height Found (Pronađena nulta visina) bit će prikazana kada se pojavi ova iznimka.
  12. Else dio koji će se izvršiti kada If uvjet nije istinit.
  13. Poruka za ispis na konzoli koja prikazuje visinu kada nije 0.
  14. Kraj If uvjeta.
  15. Kraj potprocedure showHeight().
  16. Kraj razreda Vis.
  17. Početak glavnog podpostupka.
  18. Stvaranje objekta pod nazivom Visina kao instance klase Visina.
  19. Početak bloka za rukovanje iznimkom.
  20. Pozivanje podprocedure showHeight() definirane u klasi Height. Koristili smo objekt ove klase za pristup ovoj metodi. Ovaj redak može rezultirati iznimkom. Stoga smo ga okružili kodom za obradu iznimki.
  21. Hvatanje iznimke HeightIsZeroException kao objekta ex u slučaju da se dogodi.
  22. Poruka za ispis na konzoli kada se uhvati HeightIsZeroException.
  23. Kraj bloka za rukovanje iznimkom.
  24. Pauzirajte prozor konzole čekajući da korisnik poduzme akciju da ga zatvori.
  25. Kraj glavnog podpostupka.
  26. Kraj modula.

Izbaci iznimku u VB.Netu

U obradi iznimki možete odabrati bacanje objekta. Međutim, objekt mora biti izveden iz klase System.Exception, izravno ili neizravno. Na primjer:

Primjer Throw Exception u VB.Net

Ispod je primjer iznimke throw u VB.Net-u:

Korak 1) Napravite novu konzolnu aplikaciju.

Korak 2) Koristite sljedeći kôd:

Module Module1

    Sub Main()
        Try
            Throw New ApplicationException("Throwing a custom exception")
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            Console.WriteLine("The Finally Block")
        End Try
        Console.ReadKey()
    End Sub


End Module

Korak 3) Pritisnite gumb Start na gornjoj traci da biste izvršili kod. Trebali biste dobiti sljedeće:

Izlaz konzole VB.Net Throw naredbe koji prikazuje prilagođenu poruku o iznimci

Evo snimke zaslona koda:

Primjer koda iznimke Throw u VB.Net-u s Try Catch Finally

Objašnjenje Code:

  1. Stvaranje modula pod nazivom Module1.
  2. Početak glavnog podpostupka.
  3. Početak koda za obradu pogreške.
  4. Izbacivanje objekta iznimke. Ovaj kod može generirati iznimku stoga smo ga okružili blokom Try/Catch.
  5. Hvatanje iznimke kao objekta ex ako linija izbaci iznimku.
  6. Ispis poruke o iznimci na konzoli u slučaju da se dogodi.
  7. Blok Finally za pokretanje bez obzira je li iznimka uhvaćena ili ne.
  8. Poruka za ispis na konzoli kada se izvrši blok Finally.
  9. Kraj koda za rukovanje iznimkom.
  10. Pauzirajte konzolu neko vrijeme čekajući da korisnik poduzme akciju da je zatvori.
  11. Kraj glavnog podpostupka.
  12. Kraj modula.

Pitanja i odgovori

Da. Naredba Try je valjana bez naredbe Catch sve dok uključuje blok Finally. Ovaj obrazac Try Finally pokreće kod za čišćenje, ali ne obrađuje samu iznimku.

Da. Navedite nekoliko Catch blokova za obradu različitih tipova iznimki. Poredajte ih od najspecifičnijih do najmanje specifičnih, jer ih VB.Net provjerava redom i koristi prvo podudaranje.

Gotovo uvijek. Finally se izvršava bez obzira je li iznimka uhvaćena ili ne, čak i nakon Return-a. Preskače se samo kod End naredbe ili StackOverflowException-a.

Throw ponovno podiže trenutnu iznimku i čuva njen izvorni stog. trace. Bacanje ex resetira stog trace u trenutni redak, skrivajući mjesto gdje je greška zapravo započela. Preferiram obični Throw.

Sintaktičku pogrešku prepoznaje kompajler prije pokretanja programa. Iznimka se javlja za vrijeme izvođenja programa, tijekom izvršavanja, i može se obraditi blokom Try Catch.

Česti uključuju DivideByZeroException, NullReferenceException, IndexOutOfRangeException, FormatException i OverflowException. Svi nasljeđuju System.Exception i mogu se pojedinačno uhvatiti.

Da. GitHub kopilot pretvara komentar na običnom engleskom jeziku u puni blok Try Catch Finally i predlaže ispravnu vrstu iznimke. Uvijek pregledajte generirani rukovatelj.

Da. Visual Studio intelliCode nudi kontekstualno svjesno dovršavanje cijelog retka za Catch klauzule i tipove iznimaka, naučeno iz tisuća projekata otvorenog koda.

Sažmite ovu objavu uz: