Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdIvo Lambrechts Laatst gewijzigd meer dan 10 jaar geleden
1
Exceptions Hoofdstuk 17 Hoofdstuk 17
2
Visual Basic .NET voor studenten
In dit hoofdstuk … Wat is een exception? Waarom zijn ze nuttig? De VB exception faciliteiten. Visual Basic .NET voor studenten
3
Visual Basic .NET voor studenten
Inleiding Exception er is een fout opgetreden Exception handling afhandelen van de fout op een gecontroleerde manier Voorbeelden: Ongeldige invoer (bv. een letter i.p.v. een getal) Netwerkproblemen (bv. DNS fout) Schijfproblemen (bv. bestand niet gevonden) Hardwareproblemen (bv. geen papier) Visual Basic .NET voor studenten Hoofdstuk 17
4
Visual Basic .NET voor studenten
Inleiding Syntaxfouten Bekijk je fouten in de “Error List” Visual Basic .NET voor studenten Hoofdstuk 17
5
Visual Basic .NET voor studenten
Inleiding Run-time fouten een onmogelijke operatie Niet gedetecteerd door de compiler Bv: deling door nul Logische fouten Programma produceert foute resultaten Niet altijd een crash tot gevolg! Bv: oneindige lussen Enkel op te lossen door uitvoerig te testen Visual Basic .NET voor studenten Hoofdstuk 17
6
Visual Basic .NET voor studenten
Inleiding Voorstelling programma met een “normale” werking. Als er nooit fouten zouden optreden is dit correct: ... methodeA() methodeB() ... Visual Basic .NET voor studenten Hoofdstuk 17
7
Visual Basic .NET voor studenten
Inleiding Robuust programma: omgaan met fouten op de “oude” manier ... status = methodeA() if status = 1 Then ‘handel fouten van type 1 af Elseif status = 2 Then ‘handel fouten van type 2 af End If methodeB() ‘ook hier weer een If structuur Ingewikkeld Niet overzichtelijk Visual Basic .NET voor studenten Hoofdstuk 17
8
Visual Basic .NET voor studenten
Inleiding Er is dus een nieuwe manier nodig om fouten op een elegante manier af te handelen Exception mechanisme Merk op: VB6 had nog een ander mechanisme (On Error Goto …) Dit noemt men Unstructured Exception Handling Niet (meer) gebruiken!! Visual Basic .NET voor studenten Hoofdstuk 17
9
Visual Basic .NET voor studenten
Jargon Als een fout zich voordoet in het programma: Wordt er door de runtime omgeving of door de methode zelf een speciaal object aangemaakt Men zegt dat een exception opgegooid wordt (eng: to throw) Hoe afhandelen: Op de gepaste locatie kan men deze exception opvangen (dus niet altijd vlak erna met een If) (eng: to catch) Sleutelwoorden: Throw, Try, Catch, Finally Visual Basic .NET voor studenten Hoofdstuk 17
10
Een Try-Catch voorbeeld
Demo Exception Square Visual Basic .NET voor studenten Hoofdstuk 17
11
Een Try-Catch voorbeeld
Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click Dim side As Double Try side = Double.Parse(TextBox1.Text) Label1.Text = "Area is " & _ CStr(side * side) _ & " sq units" Catch exceptionObject As FormatException Label1.Text = "Error in side: re-enter" End Try End Sub .NET Framework methode om Strings om te zetten naar Double getallen Binnen het Try blok kan zich een FormatException voordoen, nl: Parse (zie Help!) De exception wordt afgehandeld in het Catch block Visual Basic .NET voor studenten Hoofdstuk 17
12
Visual Basic .NET voor studenten
Try-Catch: regels Zet een Try blok rond de code die je wil controleren op fouten Als in een statement een exception optreedt, stopt de uitvoering onmiddellijk Er wordt gesprongen naar het Catch blok, waar de exception afgehandeld wordt Als de exception niet wordt opgevangen, wordt deze doorgegooid naar de oproepende methode Als ook deze ze niet kan opvangen weer doorgooien Uiteindelijk kom je uit bij de Main() procedure stack trace Demo: Exception Square 2 Visual Basic .NET voor studenten Hoofdstuk 17
13
Een Try-Catch voorbeeld
... Try Calculate() Catch exceptionObject As FormatException MessageBox.Show(exceptionObject.ToString) Label1.Text = "Error in side: re-enter" End Try Private Sub Calculate() Dim side As Double = Double.Parse(TextBox1.Text) Label1.Text = "Area is " & CStr(side * side) _ & " sq units" End Sub Visual Basic .NET voor studenten Hoofdstuk 17
14
Visual Basic .NET voor studenten
Het exception object Bevat nuttige informatie over de aard van de fout Tip: lees deze informatie, dit zal je helpen bij het debuggen! Properties Message : kort bericht StackTrace : hierarchie van methodes die geleid hebben tot de exception Zie ook: Source, TargetSite, InnerException Methode ToString() : String voorstelling van deze exception Visual Basic .NET voor studenten Hoofdstuk 17
15
Visual Basic .NET voor studenten
Classificatie Visual Basic .NET voor studenten Hoofdstuk 17
16
Meerdere exceptions in 1 Catch
... Try SomeOperationWithIO() Catch exceptionObject As FileNotFoundException MessageBox.Show(“File Not Found, choose other file”) Catch exceptionObject As EndOfStreamException MessageBox.Show(“End of Stream: file corrupt”) End Try Ofwel alle specifieke gevallen opvangen, zodat je een foutafhandeling hebt per geval Ofwel 1 catch die alle subklassen van IOException behandelt. Dit is naar de gebruiker toe soms minder duidelijk (Bestand niet gevonden of End of Stream ?) ... Try SomeOperationWithIO() Catch exceptionObject As IOException MessageBox.Show(“IOException occurred”) End Try Visual Basic .NET voor studenten Hoofdstuk 17
17
Combinatie van Catch blokken
... Dim bottom As Integer Dim top As Integer = 100 Try bottom = Integer.Parse(TextBox1.Text) MessageBox.Show( _ "Dividing into 100 gives " & CStr(top \ bottom)) Catch exceptionObject As DivideByZeroException MessageBox.Show("Error - zero:re-enter data") Catch exceptionObject As FormatException MessageBox.Show("Error in number: re-enter") Catch exceptionObject As SystemException MessageBox.Show(exceptionObject.ToString()) End Try Vang elk type van Exception afzonderlijk op Regel: hoe algemener de exception (SystemException), hoe later opvangen in het Try-Catch statement (waarom?) Visual Basic .NET voor studenten Hoofdstuk 17
18
Visual Basic .NET voor studenten
Samenvatting Methode1() Methode2() Methode3() Exception treedt op Uitvoering van Methode3() wordt onmiddellijk gestopt Als er een Catch statement is, die deze Exception (of een superklasse ervan) opvangt, wordt deze uitgevoerd. De uitvoering gaat vervolgens verder na End Try Als er geen Catch statement is, gaat de Exception naar de oproeper (Methode2()), indien deze ook geen Catch statement heeft naar Methode1(), enz. Als er helemaal geen Catch wordt gevonden, breekt het programma af met een foutmelding. Exception propagation (voortplanting) Visual Basic .NET voor studenten Hoofdstuk 17
19
Opgooien: een inleiding
... MessageBox.Show(CStr(WordToNumber("hXndred"))) Private Function WordToNumber(ByVal word As String) _ As Integer Dim result As Integer = 0 If word = "ten" Then result = 10 ElseIf word = "hundred" Then result = 100 ElseIf word = "thousand" Then result = 1000 Else Throw New FormatException("Wrong input: WordToNumber") End If Return result End Function Visual Basic .NET voor studenten Hoofdstuk 17
20
Visual Basic .NET voor studenten
Hoe afhandelen Zinvolle foutmelding naar de gebruiker toe, eventueel vragen om nieuwe invoer Bij waarschijnlijke bugs, exceptions loggen naar bestanden of Event logs Nooit lege Catch statements schrijven om exceptions te “verbergen” Visual Basic .NET voor studenten Hoofdstuk 17
21
Visual Basic .NET voor studenten
Finally ... Try conn = OpenConnectieNaarDB() conn.executeSQLStatements() reportResults() Catch exceptionObject As SQLException MessageBox.Show(“Illegal SQL statement") Finally conn.closeConnection() End Try Een Finally clause wordt altijd uitgevoerd, ongeacht of er nu een exception was of niet. Dit wordt vaak gebruikt bij het opruimen van resources zoals databaseconnecties Visual Basic .NET voor studenten Hoofdstuk 17
22
Zelf exceptions schrijven
In bepaalde omstandigheden zijn de ingebouwde exceptions van het .NET framework onvoldoende Bijvoorbeeld, je wil fouten die voor een bepaalde toepassing specifiek zijn, op dezelfde manier met exceptions afhandelen Hoe? Schrijf zelf een klasse die overerft van ApplicationException Visual Basic .NET voor studenten Hoofdstuk 17
23
Zelf exceptions schrijven
Public Class Invalid Exception Inherits ApplicationException Public Sub New(ByVal message As String) MyBase.New(message) End Sub End Class Voorzie steeds een constructor die een message parameter doorgeeft. Dit is de eigenlijke foutmelding Visual Basic .NET voor studenten Hoofdstuk 17
24
Zelf exceptions schrijven
Try check() Catch ex As Invalid Exception MessageBox.Show(ex.Message) End Try Private Sub check() Dim As String = TextBox1.Text Dim atIndex As Integer = If atIndex = -1 Then Throw New Invalid Exception( & _ " is geen geldig adres, teken") Else atIndex = atIndex + 1) If atIndex <> -1 Then " is geen geldig adres, bevat meer dan teken") End If End Sub Visual Basic .NET voor studenten Hoofdstuk 17
25
ErrorProvider component
Een nieuwe UI component om aan te geven welke invoervelden op een form ongeldig zijn Gebruik: sleep een ErrorProvider op een form vanuit de toolbox Methode: setError(component, message) Visual Basic .NET voor studenten Hoofdstuk 17
26
Visual Basic .NET voor studenten
Voorbeeld Try check() ErrorProvider1.SetError(TextBox1, "") Catch ex As Invalid Exception ErrorProvider1.SetError(TextBox1, ex.Message) End Try Visual Basic .NET voor studenten Hoofdstuk 17
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.