De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Exceptions Hoofdstuk 17. Visual Basic.NET voor studenten2 In dit hoofdstuk … Wat is een exception? Waarom zijn ze nuttig? De VB exception faciliteiten.

Verwante presentaties


Presentatie over: "Exceptions Hoofdstuk 17. Visual Basic.NET voor studenten2 In dit hoofdstuk … Wat is een exception? Waarom zijn ze nuttig? De VB exception faciliteiten."— Transcript van de presentatie:

1 Exceptions Hoofdstuk 17

2 Visual Basic.NET voor studenten2 In dit hoofdstuk … Wat is een exception? Waarom zijn ze nuttig? De VB exception faciliteiten.

3 Hoofdstuk 17 Visual Basic.NET voor studenten3 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)

4 Hoofdstuk 17 Visual Basic.NET voor studenten4 Inleiding Syntaxfouten Bekijk je fouten in de “Error List”

5 Hoofdstuk 17 Visual Basic.NET voor studenten5 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

6 Hoofdstuk 17 Visual Basic.NET voor studenten6 Inleiding Voorstelling programma met een “normale” werking. Als er nooit fouten zouden optreden is dit correct:... methodeA()... methodeB()...

7 Hoofdstuk 17 Visual Basic.NET voor studenten7 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

8 Hoofdstuk 17 Visual Basic.NET voor studenten8 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!!

9 Hoofdstuk 17 Visual Basic.NET voor studenten9 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

10 Hoofdstuk 17 Visual Basic.NET voor studenten10 Een Try-Catch voorbeeld Demo Exception Square

11 Hoofdstuk 17 Visual Basic.NET voor studenten11 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 String s 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

12 Hoofdstuk 17 Visual Basic.NET voor studenten12 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

13 Hoofdstuk 17 Visual Basic.NET voor studenten13 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

14 Hoofdstuk 17 Visual Basic.NET voor studenten14 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

15 Hoofdstuk 17 Visual Basic.NET voor studenten15 Classificatie

16 Hoofdstuk 17 Visual Basic.NET voor studenten16 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... Try SomeOperationWithIO() Catch exceptionObject As IOException MessageBox.Show(“IOException occurred”) 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 ?)

17 Hoofdstuk 17 Visual Basic.NET voor studenten17 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?)

18 Hoofdstuk 17 Visual Basic.NET voor studenten18 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)

19 Hoofdstuk 17 Visual Basic.NET voor studenten19 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

20 Hoofdstuk 17 Visual Basic.NET voor studenten20 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”

21 Hoofdstuk 17 Visual Basic.NET voor studenten21 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

22 Hoofdstuk 17 Visual Basic.NET voor studenten22 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

23 Hoofdstuk 17 Visual Basic.NET voor studenten23 Zelf exceptions schrijven Voorzie steeds een constructor die een message parameter doorgeeft. Dit is de eigenlijke foutmelding Public Class Invalid Exception Inherits ApplicationException Public Sub New(ByVal message As String) MyBase.New(message) End Sub End Class

24 Hoofdstuk 17 Visual Basic.NET voor studenten24 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 Throw New Invalid Exception( & _ " is geen geldig adres, bevat meer dan teken") End If End Sub

25 Hoofdstuk 17 Visual Basic.NET voor studenten25 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)

26 Hoofdstuk 17 Visual Basic.NET voor studenten26 Voorbeeld Try check() ErrorProvider1.SetError(TextBox1, "") Catch ex As Invalid Exception ErrorProvider1.SetError(TextBox1, ex.Message) End Try


Download ppt "Exceptions Hoofdstuk 17. Visual Basic.NET voor studenten2 In dit hoofdstuk … Wat is een exception? Waarom zijn ze nuttig? De VB exception faciliteiten."

Verwante presentaties


Ads door Google