Ce este o excepție?
O excepție se referă la o problemă care apare în timpul executării programului. Este provocat de o circumstanță neașteptată. Un bun exemplu este atunci când efectuați o operație de divizare și apoi împărțiți la zero (0). Se va ridica o excepție.
În acest tutorial Visual Basic, veți învăța:
- Ce este o excepție?
- Ce este gestionarea excepțiilor?
- Sintaxa lui Try / Catch
- Exemplu pentru gestionarea excepțiilor
- Excepții definite de utilizator
- Aruncarea obiectelor
Ce este gestionarea excepțiilor?
Cu excepții, puteți transfera controlul unui program dintr-o parte în alta. În VB.NET, excepțiile sunt tratate folosind următoarele 4 cuvinte cheie:
Cuvânt cheie | Detaliu |
Încerca | Lucrarea blocului Try este de a identifica blocul de cod pentru care va fi activată o excepție specifică. Ar trebui să fie urmat de un bloc de blocare. |
Captură | Prinderea excepției se face în acest bloc. Este un handler de excepții în care este tratată Exception. |
In cele din urma | Utilizați blocul Final pentru a rula un set de instrucțiuni indiferent dacă a avut loc o excepție sau nu. |
Arunca | O excepție este aruncată după apariția unei probleme. Aceasta este opera cuvântului cheie Throw. |
Sintaxa lui Try / Catch
Instrucțiunile Try / Catch iau sintaxa dată mai jos:
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
Blocul Try / Catch ar trebui să înconjoare codul care poate genera o excepție. Acest cod este cunoscut sub numele de cod protejat. Puteți utiliza mai multe declarații de captură atunci când trebuie să prindeți diferite tipuri de excepții.
Exemplu pentru gestionarea excepțiilor
Cu instrucțiunile Try / Catch, puteți separa codul de program obișnuit de sistemul de gestionare a erorilor. Să arătăm cum să gestionăm o excepție folosind cuvintele cheie Încercați, Prindeți și În cele din urmă.
Pasul 1) Creați o nouă aplicație pentru consolă.
Pasul 2) Folosiți acest cod:
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
Pasul 3) Faceți clic pe butonul Start din bara de instrumente pentru a executa codul. Ar trebui să obțineți următoarea ieșire:
Iată o captură de ecran a codului:
Explicația Codului:
- Crearea unui modul numit Module1.
- Crearea unei sub-proceduri numite divisionFunction cu două argumente întregi n1 și n2. ByVal este un cuvânt cheie VB.NET care afirmă că valorile argumentelor vor fi transmise prin valoare.
- Crearea unei variabile întregi numită răspuns.
- Începutul blocului Încercați / Prindeți. Trebuie să înconjurăm codul despre care suspectăm că poate genera o excepție cu acest bloc.
- Efectuarea unei operații de divizare între valorile variabilelor n1 și n2. Rezultatul operației de divizare este atribuit răspunsului variabil. Acest cod poate ridica o excepție, de exemplu, atunci când împărțim un număr la zero, prin urmare l-am înconjurat cu blocurile Try / Catch.
- Prinderea Excepției numită DivideByZeroException și atribuirea mesajului de excepție generat ex.
- Tipărirea unui text pe consolă pentru a notifica utilizatorul cu privire la tipul / numele excepției care a fost ridicată.
- Blocul Final. Aceasta va executa dacă o excepție este sau nu capturată.
- Tipărirea unui text pe consolă care arată rezultatul operației de divizare.
- Sfârșitul blocului Încercați, adică sfârșitul codului de gestionare a erorilor.
- Sfârșitul diviziunii Sub-procedură funcțională.
- Începutul subprocedurii principale.
- Apelarea / invocarea sub-procedurii divisionFunction. Valorile celor două argumente întregi sunt transmise aici. Valoarea n1 = 4 și n2 = 0. Aceasta înseamnă că operația de divizare va fi 4 \ 0, adică n1 \ n2.
- Întreruperea ferestrei consolei, așteptând ca utilizatorul să ia măsuri pentru a o închide.
- Sfârșitul sub-procedurii principale.
- Sfârșitul modulului.
Excepții definite de utilizator
VB.NET vă permite să vă definiți propriile excepții. Puteți obține clase de excepție definite de utilizator din clasa ApplicationException. Să demonstrăm acest lucru printr-un exemplu:
Pasul 1) Creați o nouă aplicație pentru consolă.
Pasul 2) Folosiți următorul cod:
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
Pasul 3) Faceți clic pe butonul Start din bara de sus pentru a executa codul. Ar trebui să obțineți următoarea ieșire:
Iată o captură de ecran a codului:
Explicația Codului:
- Crearea unui modul numit Module1.
- Crearea unei clase de excepție numită HeightIsZeroException. Clasa moștenește toată clasa ApplicationException.
- Crearea unei sub-proceduri numită Nou. Va fi nevoie de un singur șir argument numit text.
- Apelarea constructorului clasei de bază și transmiterea acestuia argumentul de mai sus.
- Sfârșitul noii subproceduri.
- Sfârșitul clasei HeightIsZeroException.
- Crearea unei clase numită Înălțime. Modificatorul său de acces public este Public, ceea ce înseamnă că va fi accesibil publicului.
- Crearea unei variabile întregi numită Înălțime și inițializarea valorii acesteia la 0.
- Crearea unei sub-proceduri numite showHeight ().
- Verificând când valoarea variabilei Înălțime este 0. Am folosit condiția Dacă ... Apoi.
- Pentru a arunca HeightIsZeroException dacă condiția de mai sus este adevărată. Mesajul Zero Height Found va fi afișat la lansarea acestei excepții.
- Partea Else care trebuie executată atunci când condiția If nu este adevărată.
- Mesaj pentru imprimare pe consolă care arată Înălțimea atunci când nu este 0.
- Sfârșitul condiției If.
- Sfârșitul subprocedurii showHeight ().
- Sfârșitul clasei Înălțime.
- Începutul subprocedurii principale.
- Crearea unui obiect numit Înălțime ca instanță a clasei Înălțime.
- Începutul blocului de gestionare a excepțiilor.
- Invocarea sub-procedurii showHeight () definită în clasa Height. Am folosit un obiect din această clasă pentru a accesa această metodă. Această linie poate duce la o excepție. Prin urmare, l-am înconjurat cu un cod de manipulare a excepțiilor.
- Prinderea excepției HeightIsZeroException ca obiect ex în cazul în care apare.
- Mesajul de imprimat pe consolă atunci când este surprinsă HeightIsZeroException.
- Sfârșitul blocului de gestionare a excepțiilor.
- Întrerupeți fereastra consolei, așteptând ca un utilizator să ia măsuri pentru a o închide.
- Sfârșitul sub-procedurii principale.
- Sfârșitul modulului.
Aruncarea obiectelor
În tratarea excepțiilor, puteți alege să aruncați un obiect. Cu toate acestea, obiectul trebuie derivat din System. Exceptionclass, direct sau indirect. De exemplu:
Pasul 1) Creați o nouă aplicație pentru consolă.
Pasul 2) Folosiți următorul cod:
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
Pasul 3) Faceți clic pe butonul Start din bara de sus pentru a executa codul. Ar trebui să obțineți următoarele:
Iată o captură de ecran a codului:
Explicația Codului:
- Crearea unui modul numit Module1.
- Începutul subprocedurii principale.
- Începutul codului de tratare a erorilor.
- Aruncarea unui obiect de excepție. Acest cod poate genera o excepție, prin urmare, l-am înconjurat cu un bloc Try / Catch.
- Prinderea unei excepții ca obiect ex dacă linia aruncă o excepție.
- Tipărirea mesajului de excepție pe consolă în cazul în care apare.
- Blocul Final pentru a rula dacă o excepție este prinsă sau nu.
- Mesajul de imprimat pe consolă la executarea blocului Final.
- Sfârșitul codului de gestionare a excepțiilor.
- Întrerupeți consola pentru o perioadă de timp, așteptând ca un utilizator să ia măsuri pentru a o închide.
- Sfârșitul sub-procedurii principale.
- Sfârșitul modulului.
rezumat
- O excepție se referă la o problemă care apare în timpul executării programului cauzată de o circumstanță neașteptată.
- Dacă bănuiți că un cod va genera o excepție, înconjurați-l cu un bloc Try / Catch.
- Blocul Final vine după blocul Try / Catch și execută dacă o excepție este prinsă sau nu.
- VB.NET ne permite să creăm excepții personalizate.