Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Liutbald Stoldt Geändert vor über 10 Jahren
1
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung treffen!
2
PRJ 2007/2 Stefan Dissmann Motivation Beispiel: Warteschlange (Liste) variabler Länge mit Länge-festlegen, Anstellen, Aufrufen Was ist bei –Anstellen an volle Warteschlange –Bearbeiten bei leerer Warteschlange –Anlegen einer Warteschlange der Länge 0
3
PRJ 2007/3 Stefan Dissmann Motivation Eine Lösung: Fehlerwerte aus Methode zurückgeben! Aber nicht möglich bei Methoden mit Rückgaben! Und: Weitere Bearbeitung kompliziert!
4
PRJ 2007/4 Stefan Dissmann Exceptions Daher: Eigenes Konstrukt in JAVA: exception Idee: Jede Methode kann alternativ ein exception-Objekt zurückgeben!
5
PRJ 2007/5 Stefan Dissmann Exceptions Beispiel: void nächster (int eintrag) throws Leer { if (belegt()) { … ; } else throw new Leer(); }
6
PRJ 2007/6 Stefan Dissmann Exceptions Beispiel: void nächster (int eintrag) throws Leer { if (belegt()) { … ; } else throw new Leer(); } Angabe des Typs des möglichen zusätzlichen Rückgabeobjektes
7
PRJ 2007/7 Stefan Dissmann Exceptions Beispiel: void nächster (int eintrag) throws Leer { if (belegt()) { … ; } else throw new Leer(); } Werfen eines solchen Rückgabeobjektes
8
PRJ 2007/8 Stefan Dissmann Exceptions Vereinbarung der Ausnahmeklasse: class Leer extends Exception {} Klasse kann Attribute und Methoden besitzen, muss aber nicht. Klassenhierarchien sind möglich: class FIFOAusnahme extends Exception {} class Voll extends FIFOAusnahme {} class Leer extends FIFOAusnahme {}
9
PRJ 2007/9 Stefan Dissmann Exceptions Behandlung von geworfenen Exceptions: Abfangen und Bearbeiten mit try { … } catch (…) { … } Weiterleiten Abfangen und neue Exception werfen
10
PRJ 2007/10 Stefan Dissmann Abfangen von Exceptions Beispiel: class Station { private Warteschlange dieSchlange; … void arbeite() { try { auftrag = dieSchlange.nächster(); //... Bearbeitung des Auftrags } catch (Leer l) { System.out.println(KeinAuftrag); } Ausnahme kann geworfen werden
11
PRJ 2007/11 Stefan Dissmann Abfangen von Exceptions Beispiel: class Station { private Warteschlange dieSchlange; … void arbeite() { try { auftrag = dieSchlange.nächster(); //... Bearbeitung des Auftrags } catch (Leer l) { System.out.println(Kein Auftrag); } Ausnahme wird gefangen und bearbeitet
12
PRJ 2007/12 Stefan Dissmann Abfangen von Exceptions Beispiel: class Station { private Warteschlange dieSchlange; … void arbeite() { try { auftrag = dieSchlange.nächster(); //... Bearbeitung des Auftrags } catch (FIFOAusnahme f) { System.out.println(!); } Ausnahmen einer Hierarchie werden gefangen
13
PRJ 2007/13 Stefan Dissmann Abfangen von Exceptions Beispiel: class Station { private Warteschlange dieSchlange; … void arbeite() { try { auftrag = dieSchlange.nächster(); //... Bearbeitung des Auftrags } catch (Exception e) { System.out.println(!); } Alle Ausnahmen werden gefangen
14
PRJ 2007/14 Stefan Dissmann Abfangen von Exceptions Beispiel: class Station { private Warteschlange dieSchlange; … void arbeite() { try { auftrag = dieSchlange.nächster(); //... Bearbeitung des Auftrags } catch (Leer l) { System.out.println(kein Auftrag); } catch (Voll v) { System.out.println(??); } Ausnahmen werden nacheinander gefangen
15
PRJ 2007/15 Stefan Dissmann Weiterleiten von Exceptions Beispiel: class Station { private Warteschlange dieSchlange; … void arbeite() throws Leer { auftrag = dieSchlange.nächster(); //... Bearbeitung des Auftrags } Ausnahmen werden nicht gefangen sondern einfach weitergeleitet
16
PRJ 2007/16 Stefan Dissmann Abfangen und Werfen von Exceptions Beispiel: class Station { private Warteschlange dieSchlange; … void arbeite() throws OhneAuftrag { try { auftrag = dieSchlange.nächster(); //... Bearbeitung des Auftrags } catch (Leer l) { throw new OhneAuftrag(); }
17
PRJ 2007/17 Stefan Dissmann Abfangen und Werfen von Exceptions Beispiel: class Station { private Warteschlange dieSchlange; … void arbeite() throws Leer { try { auftrag = dieSchlange.nächster(); //... Bearbeitung des Auftrags } catch (Leer l) { System.out.println(Ohne Auftrag); throw l; }
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.