340 likes | 495 Views
Verdieping Programmeren in Java - deel 1. college 6 mei 2001. programma 6 mei. 1e uur: hoofdstuk 14 Exception Handling 2e uur: hoofdstuk 15: Multithreading. Hoofdstuk 14 Exception Handling. wat is het? mechanisme in Java om ‘fouten’ op te vangen welke fouten?
E N D
Verdieping Programmeren in Java - deel 1 college 6 mei 2001
programma 6 mei • 1e uur: hoofdstuk 14 Exception Handling • 2e uur: hoofdstuk 15: Multithreading
Hoofdstuk 14 Exception Handling • wat is het? • mechanisme in Java om ‘fouten’ op te vangen • welke fouten? • synchrone fouten buiten de actuele scope in run-time • hoe werkt het? • speciale sleutelwoorden: try - catch - throw
Conventioneel vs EH • conventionele foutenopvang: • voordeel: integrale code blijft leesbaar bij weinig fouten • nadeel: code ‘vervuiling’ wanneer vele fouten opgevangen moeten worden • exception handling: • voordeel: integrale code blijft leesbaar bij veel fouten • nadeel: apart mechanisme nodig
Wat is het? • een speciale programmastruktuur voor signaleren (throw) en afhandelen (catch) van fouten • afhandelen: vgl. switch statement, • plus het delegeren van de foutenafhandeling • delegatie aan: exception handler • vergelijkbaar met event handling
Wat is het? • gebaseerd op werk van Koening & Stroustrup voor C++ • exceptions in Java zijn objecten • klassenhiërarchie met als topklasse: Throwable
Throwable subklassen • Error • bv. ivm links, threads, VM • meestal onherstelbaar, worden niet expliciet opgevangen, • RunTimeException • komen in goed programma niet voor • andere klassen: checked exceptions • catch or declare principe
checked versus unchecked • checked: compiler controleert • unchecked: mag je zelf controleren • Campione et al.: controversy • Client - Server voorbeeld
Deitel: welke fouten? • NIET: asynchrone fouten: • dat zijn storingen van buiten het werkende programma • bv. schijf I/O, netwerkboodschappen, muisevents, toetsenbord, etc. • deze anders oplossen, bv met event luisteraars
Deitel: welke fouten? • NIET: synchrone fouten binnen de scope van programmaverwerking • deze conventioneel oplossen in de kode • WEL: synchrone fouten van buiten de scope van verwerking • Software Engineering Observation 14.1 (p.700)
Voorbeeld fig. 14.1 (p. 813) • de scope hier is de berekening van de deling van twee ingevoerde getallen • binnen de scope: deling met alle ingevoerde getallen, ook buiten de gevraagde range (speciale tekens?, letters?) • buiten de scope: niet kunnen uitvoeren van de deling door de methode
Impliciet opvangen • kleiner voorbeeld Mughal & Rasmussen • opklimmende varianten van opwerpen en afhandelen • voorbeeld 1: default exception handling • ‘upward percolating’ in de call-stack tot aan de JVM is te zien aan de ‘stack-trace’
Expliciet opvangen • ‘try block’ : plaats waar de fout kan optreden • ‘catch block’ : plaats van opvang van mogelijk opgetreden fouten • ‘exception’ : fouten moeten vooraf gedefinieerd zijn of worden in een klasse
try - catch • meerdere catch blokken mogelijk • compiler kijkt naar de volgorde • ‘shadowing’ is niet toegestaan
Hoe werkt het? (2) • eventueel afwerken met een ‘finally’ blok, dat altijd wordt uitgevoerd • veel exceptions zijn reeds gedefinieerd in diverse pakketten (zie p. 650 ev.) • klassen van exceptions kun je ook zelf definiëren • EH levert géén ge-optimaliseerde kode
Eigen exception klasse • subklasse van Exception • instantie van klasse wordt exception object • delegatie kan leiden tot communicatie-probleem, vgl oplossing event handling • evt. informatie meegeven aan dit object • eenvoudig voorbeeld
Niet opgevangen fouten • zijn er na finally nog exceptions over? • dan breekt de methode af (abort) • en vangt de default exception handler ze op
Zelf exceptions opwerpen • wanneer: • bij eigen excepties • situaties waarin het systeem niet voorziet • sleutelwoord: ‘throw’ • opgeworpen object moet ‘throwable’ zijn • meestal anoniem object • exceptionslijstje methode: ‘throws’
Throws clausule • checked exceptions: catch or declare principe: • catch: try-catch-finally • declare: throws in methode header • compiler dwingt keuze af • voorbeeld 6
Re-throw • par 14.9: rethrowing an exception • met ‘throw’ doorgeven in plaats van afhandelen • catch blok geeft exception door naar ‘next enclosing try block’ • wanneer zinvol ?
Hoe werkt het? (3) • Java: ‘determination model’ i.t.t. ‘resumption model’ of exception handling (p.809) • ook in programma-lus ? • EH nodig in programma-lus?
volgende week • tentamen