Ausnahmebehandlung in Java

Ähnliche Dokumente
Beispiel für überladene Methode

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

Ausnahmebehandlung. Ausnahmen werfen (auslösen) Eigene Ausnahmen definieren. Ausnahmen abfangen. Ausnahmen definieren

Synchronisation in Java. Invisible Web

Java I Vorlesung Nebenläufigkeit

Einführung in die Programmierung Blockkurs Java

Einstieg in die Informatik mit Java

Parallele Prozesse. Prozeß wartet

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Praktikum aus Softwareentwicklung 2, Stunde 5

Kapitel 9: Klassen und höhere Datentypen. Selektoren

Programmierung mit Threads in Java

Client-Server-Beziehungen

Verteilte Systeme CS5001

Ersetzbarkeit und Verhalten

Institut für Informatik. Endterm Klausur zu Informatik I 20. Februar 2010

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Java Concurrency Utilities

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

Grundlagen der Fehlerbehandlung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 06: Ausnahme- und Fehlerbehandlung in Java.

Einführung in die Informatik 1

Dr. Monika Meiler. Inhalt

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Programmieren I. Fehlerbehandlung Exceptions. Heusch 2. Bd, 3 Ratz 10. Institut für Angewandte Informatik

Zur Erinnerung: Threads. Threadverwaltung. Threads: Prioritäten. Beispiel Flugbuchungsprogramm. Nichtdeterminismus

Grundlagen der Programmierung Prof. H. Mössenböck. 16. Ausnahmen (Exception Handling)

Listing 1: Cowboy. Listing 2: Woody

Thread-Konzept in objektorientierten Programmiersprachen. Threads. Threads in Java

Einführung Verteilte Systeme - Java Threads III -

Arten von Klassen-Beziehungen

Vorlesung Informatik II

Java - Programmierung - Prozedurale Programmierung 1

Parallele Prozesse Prozeß Parallele Prozesse verzahnte Prozesse Nebenläufige Prozesse: Threads Vorlesung Software-Entwicklung / Folie 131 Ziele:

Ersetzbarkeit und Verhalten

Das Monitorkonzept Brinch-Hansen

Soll die Programm-Ausführung nicht beendet werden, muss der Fehler abgefangen werden. NumberFormatException

Interface. So werden Interfaces gemacht

9. Fehler und Ausnahmen Grundlagen der Programmierung 1 (Java)

JUnit a Cook s Tour. Framework in Java Automatisierter Ablauf von Testfällen Testläufe kombinieren. Unterlagen als PDF auf der Übungsseite!

Java-Schulung Grundlagen

Exceptions. CoMa-Übung VII TU Berlin. CoMa-Übung VII (TU Berlin) Exceptions / 1

1.7 Fehler- und Ausnahmebehandlung

Ausnahmenbehandlung in Java. Dr. Horst Treiblmaier Abteilung für Wirtschaftsinformatik WU Wien

FAKULTÄT FÜR INFORMATIK

1 Organisatorisches. 2 Compilezeit- und Laufzeitfehler. 3 Exceptions. 4 Try-Catch-Finally

UML / Fujaba. Generierung von Java-Quellcode aus UML-Diagrammen. Marcel Friedrich

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

int x = 3; int y = 11; public A () { this.x = z; y *= z;

JJ Prozesse und Nebenläufigkeit

4. Vererbung Die Klasse Object. Die Klasse Object

Ausdrücke in Scala. Funktionale Programmierung. Christoph Knabe FB VI

Prozeßorientierter Simulator mit Java

Gebundene Typparameter

Arten von Klassen-Beziehungen

8.6 Visualisierung der Sortieralgorithmen

Exceptions. Prof. Dr. Margarita Esponda SS M. Esponda-Argüero

Vorlesung 10. Sitzung Grundlegende Programmiertechniken

Prozesse. Prozesse sind Programme. Prozesse können aus Unterprozessen bestehen. Prozesshierarchie Unterprozesse Threads

1 Fehler-Objekte: Werfen, Fangen, Behandeln

Nebenläufigkeit mit Java

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Verkettete Datenstrukturen: Listen

Nebenläufigkeit mit Java

5. Threads, Serverprozesse und Benachrichtigungen

Klausur Software-Entwicklung September 00

15 Fehlerobjekte: Werfen, Fangen, Behandeln

15 Fehlerobjekte: Werfen, Fangen, Behandeln. Idee. Fehlerklassen. Fehlerklassen

Sven Osterwald Concurrent Objects. Proseminar Parallele Programmierung in Java

Nebenläufige Programmierung I

Programmieren in Java

Exception. 6. Exceptions. Die Klasse java.lang.exception. Fehlermeldung. Klassenname. Ort des Auftretens

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

II.4.5 Generische Datentypen - 1 -

15 Fehlerobjekte: Werfen, Fangen, Behandeln

am Beispiel von JUnit

Aufgabe 1: Objekte, Klassen, Vererbung (15 Punkte)

1 Klassen anlegen und Objekte erzeugen

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Java-Programmierung. Remote Method Invocation - RMI

1 Klassen anlegen und Objekte erzeugen

Programmieren in Java -Eingangstest-

Instrumentierung und Dekodierung

Verteilte Systeme. 2. Die Client-Server-Beziehung und daraus resultierende Techniken. 2.2 Nebenläufigkeitstechniken in Java

Prinzipien Objektorientierter Programmierung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Threads In dieser Übung beschäftigen wir uns mit der Realisierung von Threads in Java.

Client-Server-Beziehungen

System.out.println("TEXT");

Mobile und Verteilte Datenbanken

Lösungen zum Übungsblatt 10: Entwicklung von Softwaresystemen I (WS 2003/04)

Variablen manipulieren per JDI

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Einführung in Java. Ausgewählte Quellen zu Java

Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7. RMI Projekt gettime 1

Objektorientierte Programmierung Studiengang Medieninformatik

Muster nebenläufiger Programmierung. concurrent Packet von Java. Alois Schü;e AOSD 1

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Remote Method Invocation

Welche Informatik-Kenntnisse bringen Sie mit?

Transkript:

Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A { void foo() throws Help { if (helpneeded()) throw new Help();... try {... catch (Help e) {... catch (Exception e) {... finally {... Objektorientierte Programmiertechniken: Ausnahmebehandlung und Nebenläufigkeit 1

Ausnahmebehandlung Ersetzbarkeit Methode in Unterklasse soll nur dann eine Exception werfen, wenn Aufrufer der Methode in Oberklasse dies erwartet Einschränkungen auf throws-klausel nicht hinreichend Zusicherungen beachten Information über mögliche Exceptions = Nachbedingung Objektorientierte Programmiertechniken: Ausnahmebehandlung und Nebenläufigkeit 2

Einsatz von Ausnahmebehandlungen Ursachen unvorhergesehener Programmabbrüche finden (kaum vermeidbar, außer durch Wiederaufsetzen) kontrolliertes Wiederaufsetzen nach Fehlern (in der Praxis notwendig, sinnvolles Aufsetzen schwierig) vorzeitiger Ausstieg aus Sprachkonstrukten (fehleranfällig, vor allem wenn nicht lokal; vermeidbar) Rückgabe alternativer Ergebniswerte (oft Hinweis auf schlechte Programmstruktur; vermeidbar) Objektorientierte Programmiertechniken: Ausnahmebehandlung und Nebenläufigkeit 3

Einsatzbeispiel (ganz schlecht) Ohne Ausnahmebehandlung: while (x!= null) x = x.getnext(); Mit Ausnahmebehandlung: try { while (true) x = x.getnext(); catch (NullPointerException e) { fehleranfällig, da Ausnahme auch in getnext auslösbar Objektorientierte Programmiertechniken: Ausnahmebehandlung und Nebenläufigkeit 4

Einsatzbeispiel (eher schlecht) trickreiche Verwendung von Ausnahmen: try { throw x if (x instanceof T1) {... catch (T1 x) {... else if (x instanceof T2 {... catch (T2 x) {......... else if (x instanceof Tn {... catch (Tn x) {... else {... catch (Exception x) {... keine nicht-lokalen Ausnahmen (daher weniger fehleranfällig) aber beide Varianten schwer wartbar Objektorientierte Programmiertechniken: Ausnahmebehandlung und Nebenläufigkeit 5

Einsatzbeispiel (empfohlen) Ohne Ausnahmebehandlung: public static String adda (String x, String y) { if (onlydigits(x) && onlydigits(y)) {... else return "Error"; Mit Ausnahmebehandlung: public static String addb (String x, String y) throws NoNumberString { if (onlydigits(x) && onlydigits(y)) {... else throw new NoNumberString(); sinnvoller Einsatz, da Fehlerabfragen vermieden werden Objektorientierte Programmiertechniken: Ausnahmebehandlung und Nebenläufigkeit 6

Nebenläufige Programmierung mehrere gleichzeitig ablaufende (= nebenläufige) Threads gleichzeitige und überlappte Zugriffe auf Variablen Fehler wenn inkonsistente Zustände existieren (häufig!) Synchronisation soll gleichzeitige und überlappte Zugriffe vermeiden während Zustände inkonsistent sein können Programmierer muss sich um Synchronisation kümmern Synchronisation ist häufige Fehlerquelle Objektorientierte Programmiertechniken: Ausnahmebehandlung und Nebenläufigkeit 7

Beispiel für fehlende Synchronisation public class Zaehler { private int i = 0, j = 0; public void schnipp() { i++; j++; überlappte Aufrufe von schnipp in mehreren Threads möglicherweise i j auch bei nur einer Variablen werden Aufrufe vergessen Problem bei einfachem Testen kaum feststellbar Objektorientierte Programmiertechniken: Ausnahmebehandlung und Nebenläufigkeit 8

Einfache Synchronisation in Java public class Zaehler { private int i = 0, j = 0; public synchronized void schnipp() { i++; j++; während der Ausführung einer synchronized Methode kann kein anderer Thread eine synchronized Methode desselben Objekts ausführen mutual exclusion weitere (fast) gleichzeitige Aufrufe von schnipp blockiert andere Threads warten bis ausgeführte Methode fertig synchronized Methoden sollen nur kurz laufen Objektorientierte Programmiertechniken: Ausnahmebehandlung und Nebenläufigkeit 9

Synchronisierte Blöcke in Java public class Zaehler { private int i = 0, j = 0; public void schnipp() { synchronized(this) { i++; synchronized(this) { j++; kurzfristig i j möglich, aber kein Aufruf vergessen Lock für Thread auf Argument von synchronized (= this) nur dieser Thread darf auf synchronized Blöcke und Methoden desselben Objekts zugreifen, andere müssen warten synchronized Methoden setzen Lock immer auf this Objektorientierte Programmiertechniken: Ausnahmebehandlung und Nebenläufigkeit 10

Threads warten auf Objektzustände public class Druckertreiber { private boolean online = false; public synchronized void drucke (String s) { while (!online) { try { wait(); catch(interruptedexception ex) { return;... // schicke s zum Drucker public synchronized void onoff() { online =!online; if (online) notifyall(); Objektorientierte Programmiertechniken: Ausnahmebehandlung und Nebenläufigkeit 11

Erzeugen neuer Threads public class Produzent implements Runnable { private Druckertreiber t; public Produzent(Druckertreiber _t) { t = _t; public void run() { String s =... for (;;) {... // produziere neuen Wert in s t.drucke(s); // schicke s an Druckertreiber... Druckertreiber t = new Druckertreiber(...); for (int i = 0; i < 10; i++) { Produzent p = new Produzent(t); new Thread(p).start(); Objektorientierte Programmiertechniken: Ausnahmebehandlung und Nebenläufigkeit 12

Synchronisation und Bibliotheksklassen kein einheitliches Schema manchmal Client für Synchronisation verantwortlich, manchmal Server Dokumentation (Zusicherungen) sehr wichtig z.b. Synchronisation in Vector nicht beeinflussbar z.b. Client muss für Synchronisation in List sorgen: List von synchronized Methoden/Blöcken aus verwenden oder Listen folgendermaßen erzeugen: List x = Collections.synchronizedList(new LinkedList(...)); Objektorientierte Programmiertechniken: Ausnahmebehandlung und Nebenläufigkeit 13

Probleme bei Synchronisation Synchronisation kann Threads blockieren und dabei die Ausführung von Programmen (sehr stark) verzögern deadlock und livelock als Extremfälle (= unendliche Verzögerung, liveness properties ) solche Probleme derzeit nur durch Testen auffindbar nebenläufige Programmierung schwierig und fehleranfällig (vor allem Ersetzbarkeit sehr schwer zu erreichen) auf Einfachheit der Synchronisation achten wait, notify und notifyall möglichst vermeiden Erfahrung wichtig (z.b. spezielle Entwurfsmuster) Objektorientierte Programmiertechniken: Ausnahmebehandlung und Nebenläufigkeit 14