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