Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.

Ähnliche Präsentationen


Präsentation zum Thema: "PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung."—  Präsentation transkript:

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; }


Herunterladen ppt "PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung."

Ähnliche Präsentationen


Google-Anzeigen