Programmiertechnik Ausnahmen

Ähnliche Dokumente
Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Ausnahmen

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

7. Java Fehler und Ausnahmen

Vorlesung 10. Sitzung Grundlegende Programmiertechniken

1 Fehler-Objekte: Werfen, Fangen, Behandeln

Java Einführung Exception Handling. Kapitel 17

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

Ausnahmen. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

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

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

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

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

Ausnahmen. Dr. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

9. Ausnahmebehandlung

Mögliche Implementierung von intern():

Java Fehlerbehandlung

12. Java Fehler und Ausnahmen

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

Programmiertechnik Klassenmethoden

9. Ausnahmebehandlung

6. Java Fehler und Ausnahmen

Liste Programmieren Java Überblick

Zuverlässigkeit von Programmen: Behandlung von Ausnahmesituationen

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

Exceptions - Klausuraufgaben

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden

15 Fehlerobjekte: Werfen, Fangen, Behandeln

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

15 Fehlerobjekte: Werfen, Fangen, Behandeln

6. Java Fehler und Ausnahmen. Fehler, Systemausnahmen, Benutzerausnahmen, Behandeln von Ausnahmen, Spezialfall Ressourcen

1.7 Fehler- und Ausnahmebehandlung

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

Abschnitt 7: Weitere Konzepte der oo Programmierung in Java

Sortieralgorithmen. Nachfolgend wird die Menge der ganzen Zahlen und die darauf definierte Relation betrachtet.

Objektorientierte Programmierung. Kapitel 13: Exceptions

Handbuch konsultieren!

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

Ausnahmen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 27.6.

Java : Fehlerbehandlung.

II.4.4 Exceptions - 1 -

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

4.5 Exceptions. TU Darmstadt Allgemeine Informatik II, SS 05

15 Fehlerobjekte: Werfen, Fangen, Behandeln

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

Vorlesung Informatik II

Java - Programmierung - Prozedurale Programmierung 1

Überblick. Peer Kröger (LMU München) Einführung in die Programmierung WS 16/ / 854

Ausnahmebehandlung PK11W-16,

Übungsstunde 9. Einführung in die Programmierung I

Einführung in die Programmierung für NF. Fehler und Ausnahmen

Javakurs für Anfänger

Objektorientierte Programmierung. Kapitel 9: Exceptions I

System.out.println("TEXT");

Teil II. Objektorientierte Programmierung und objektorientierter Entwurf

boolean ispalindrome = word.equalsignorecase(reverse.tostring());

Objektorientierung II & die Java Klassenbibliothek. Kristian Bergmann und Arthur Lochstampfer

Programmiertechnik Klassen

Komponenten-basierte Entwicklung Teil 4: Exceptions

Java I Vorlesung Exceptions

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Programmieren in Java

Ausnahmen. Exceptions. Definition Ausnahmen erzeugen Ausnahmen abfangen Ausnahmen weiterleiten. Dr. Beatrice Amrhein

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Variablenarten. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassen

Informatik 1 - Translation Studies in Information Technology. Musterlösung zum Aufgabenblatt der ersten Pflichtübung im Wintersemester 16/17

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

Programmieren in Java

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

Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am

Ausdrucksbäume in verschiedenen Darstellungen

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

Exceptions. CoMa-Übung VI TU Berlin. CoMa-Übung VI (TU Berlin) Exceptions / 19

Aufgabe: Hinweise zu der Farbwahl der Texte/Wörter: Orange ist angegeben, wo etwas ergänzt werden soll.

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Einstieg in die Informatik mit Java

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

3. Exceptions. Hintergrund: Programmieren auf der Basis von Verträgen. Kundenklasse. Lieferantenklasse

Java für Anfänger Teil 4: Anweisungen. Programmierkurs Manfred Jackel

Programmieren in Java

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

Geoinformatik und Vermessung Prüfung 502 : Informatik (JAVA)

Methoden und Funktionen

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Programmiertechnik Objektorientierung, Teil 2

1 Klassen anlegen und Objekte erzeugen

Programmiertechnik Übungen zu Klassen & -methoden

Geoinformatik und Vermessung Prüfung 502 : Informatik (JAVA)

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Ausnahmebehandlung in Java

Umgang mit Fehlern. Sinn von Ausnahme-/Fehlerobjekten Dokumentation Umgang mit Fehlern Eigene Fehlerklassen

Einfache Arrays. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Einstieg in die Informatik mit Java

1 Klassen anlegen und Objekte erzeugen

Ausnahmen und IO. Fehler, Ausnahmen, Java- Exception, throw, catch, Ströme, Puffer, Dateien lesen, schreiben, Tastatur, Terminal, HTTP

Transkript:

Programmiertechnik Ausnahmen Prof. Dr. Oliver Haase Oliver Haase Hochschule Konstanz 1

Motivation public class Excep1 { public void doyourjob() { Scanner scanner = new Scanner(System.in); System.out.print("a: "); int a = scanner.nextint(); System.out.print("b: "); int b = scanner.nextint(); System.out.println("a / b = " + a/b); public static void main(string[] args) { Excep1 instance = new Excep1(); instance.doyourjob(); System.out.println("Job done."); Oliver Haase Hochschule Konstanz 2

Motivation Anwendungsbeispiel 1: java Excep1 a: 15 b: 3 a / b = 5 Job done. Konsole Anwendungsbeispiel 2: Konsole java Excep1 a: 15 b: 0 java.lang.arithmeticexception: / by zero at Excep1.doYourJob(Excep1.java:7) Oliver Haase Hochschule Konstanz 3

Motivation Unter bestimmten Umständen kann das Programm nicht ordnungsgemäß beendet werden, sondern liefert einen Fehler und bricht ab. Es gibt eine Vielzahl möglicher Fehlerquellen: arithmetische Operationen (Division durch 0, ) Zugriff auf Datei, die nicht existiert Schreibzugriff auf schreibgeschützte Datei Festplattenschaden Programm lädt Daten aus dem Internet herunter, Kommunikationsverbindung bricht ab. Diese Vorlesung handelt davon, wie man in Java-Programmen mit solchen Fehlersituationen umgeht. Oliver Haase Hochschule Konstanz 4

Fehlerbehandlungsmethoden Moderne Programmiersprachen, wie z.b. C++ und Java, verwenden Ausnahmen (exceptions) für die Fehlerbehandlung. In älteren Programmiersprachen (z.b. in C) verwendet man die Funktionsrückgabewerte, um fehlerhafte Funktionsausführung anzuzeigen integrierte Fehlerbehandlung Das Fehlschlagen einer Funktion wird dabei üblicherweise durch einen negativen Rückgabewert angezeigt. Oliver Haase Hochschule Konstanz 5

integrierte Fehlerbehandlung C-Stil Fehlerbehandlung in Java: public class Excep2 { public int doyourjob() { Scanner scanner = new Scanner(System.in); System.out.print("a: "); int a = scanner.nextint(); System.out.print("b: "); int b = scanner.nextint(); if ( b == 0 ) return -1; System.out.println("a / b = " + a/b); return 0; Oliver Haase Hochschule Konstanz 6

integrierte Fehlerbehandlung public static void main(string[] args) { int ret; Excep2 instance = new Excep2(); if ( ( ret = instance.doyourjob() ) < 0 ) System.out.println("Fehlercode: " + ret); else System.out.println("Job done."); java Excep2 a: 15 b: 0 Fehlercode: -1 Konsole Oliver Haase Hochschule Konstanz 7

Diskussion Integrierte Fehlerbehandlung hat mehrere Nachteile: verschiedene Fehlerwerte für verschiedene Funktionen, manchmal bedeutet 0 Fehler, manchmal -1, manchmal jeder negative Wert Aufrufer muss wissen, welchen Wert Funktion im Fehlerfall liefert Fehler sollten die Ausnahme sein unnatürlich, den Rückgabewert einer Funktion dem Fehlerfall zu widmen Fehlerbehandlung integriert in "regulären" Code schwer lesbar Wenn Funktion tatsächlich einen Wert liefern soll, muss entweder dieser Wert oder der Fehlercode innerhalb eines Referenztypparameters zurückgegeben werden. Oliver Haase Hochschule Konstanz 8

Fehlercode als Referenzparameter Beispiel: Angenommen, die Methode doyourjob druckt das Ergebnis der Divsion a/b nicht aus, sondern liefert es als Ergebniswert zurück: public class Excep3 { public int doyourjob(int[] error) { Scanner scanner = new Scanner(System.in); System.out.print("a: "); int a = scanner.nextint(); System.out.print("b: "); int b = scanner.nextint(); if ( b == 0 ) { error[0] = -1; return -1; error[0] = 0; return a/b; Oliver Haase Hochschule Konstanz 9

integrierte Fehlerbehandlung public static void main(string[] args) { Excep3 instance = new Excep3(); int[] error = new int[1]; int ret = instance.doyourjob(error); if ( error[0] == -1 ) System.out.println("Fehlercode: " + error[0]); else { System.out.println("a / b = " + ret); System.out.println("Job done."); Alternative: Statt ein Feld zu verwenden könnte man eine Klasse definieren, die eine int-komponente für den Errorcode enthält. Fazit: Funktioniert, aber mühsam, unnatürlich und fehleranfällig Oliver Haase Hochschule Konstanz 10

Ausnahmen/Exceptions Trennung von regulärem Code und Fehlerbehandlung. Wenn Ausnahmesituaton eintritt z.b. Division durch 0 wird ein Exception-Objekt erzeugt und mit Informationen zur Fehlerursache und zum Ort des Auftretens initialisiert. Diese Informationen können über geeignete Instanzmethoden abgerufen werden. Exceptions werden nicht als reguläre Methodenrückgabewerte propagiert, sondern über einen speziellen Exception-Mechanismus. Oliver Haase Hochschule Konstanz 11

Ausnahmen/Exceptions In Java ist jedes Exception-Objekt eine Instanz der Klasse java.lang.exception, oder einer Subklasse davon. Die Fehlerursache kann mit der Instanzmethode public String getmessage() abgerufen werden. Der Ort des Auftretens kann mit der Instanzmethode public String printstacktrace() abgerufen werden. Konsole java Excep1 Exception-Klasse a = 15 getmessage() b = 0 java.lang.arithmeticexception: / by zero at Excep1.doYourJob(Excep1.java:10) printstacktrace() Oliver Haase Hochschule Konstanz 12

Abfangen von Exceptions Wenn eine Ausnahmesituation auftritt, wird eine Exception (Ausnahme) geworfen ("to throw an exception"). Exceptions können im Programm abgefangen werden ("to catch an exception"), um Abstürze zu vermeiden geeignete Fehlerbehandlung durchzuführen, etwa Meldung ausgeben (z.b. in einem geeigneten Fenster) Aufräumen bevor das Programm ordentlich terminiert wird. Oliver Haase Hochschule Konstanz 13

Abfangen von Exceptions In Java geschieht dies durch eine Kombination von try und catch Anweisungen: Anweisungen, die fehlschlagen können, werden mit try eingeklammert; Die Fehlerbehandlung folgt in 1 oder mehreren catch-blöcken. Oliver Haase Hochschule Konstanz 14

Abfangen von Exceptions Beispiel: public void doyourjob() { Scanner scanner = new Scanner(System.in); System.out.print("a: "); int a = scanner.nextint(); System.out.print("b: "); int b = scanner.nextint(); try { System.out.println("a/b = " + a/b); catch(arithmeticexception e) { System.out.println("Wir haben da ein Problem: " + e.getmessage()); System.out.println( "Das haetten Sie nicht tun sollen..."); Oliver Haase Hochschule Konstanz 15

Abfangen von Exceptions Konsole java Excep4 a: 15 b: 0 Wir haben da ein Problem: / by zero Das haetten Sie nicht tun sollen... Beachte: Das Programm terminiert nicht mehr automatisch, nachdem die Exception geworfen wurde! Oliver Haase Hochschule Konstanz 16

Beispiel Daten aus Datei lesen Berechnung des arithmetischen Mittelwerts einer Menge ganzer Zahlen. Die Zahlen stehen in einer Datei vals.txt, und zwar genau eine Zahl pro Zeile, gefolgt von einem Zeilenumbruch. Beispiel: 2 4 1 0 Inhalt der Datei vals.txt (Mittelwert: 1.75) Oliver Haase Hochschule Konstanz 17

Beispiel Daten aus Datei lesen Die Lösung in Java benötigt 2 Klassen aus dem Paket java.io, nämlich FileReader und BufferedReader. Eine Instanz der Klasse FileReader repräsentiert eine zum Lesen geöffnete Datei. Mit Hilfe der folgenden Zeile wird ein Objekt f vom Typ FileReader erzeugt, das Daten aus der Datei vals.txt lesen kann: FileReader f = new FileReader("vals.txt"); Beachte: Mit einem FileReader-Objekt kann man eine Datei nur zeichenweise einlesen. Oliver Haase Hochschule Konstanz 18

Beispiel Daten aus Datei lesen Instanzen der Klasse BufferedReader erlauben, Dateien zeilenweise einzulesen. Die folgende Anweisung erzeugt ein solches Objekt unter Verwendung des zuvor erzeugten FileReader- Objekts: BufferedReader b = new BufferedReader(f); Beide Anweisungen können zusammengefasst werden: BufferedReader b = new BufferedReader(new FileReader("vals.txt")); Damit sieht der 1. Lösungsversuch wie folgt aus: Oliver Haase Hochschule Konstanz 19

Beispiel Daten aus Datei lesen import java.io.*; public class Mittelwert { private static int anzahl = 0; public static int parse(string s) { anzahl++; return Integer.parseInt(s); Fortsetzung auf nächster Folie Oliver Haase Hochschule Konstanz 20

Beispiel Daten aus Datei lesen public static void main(string[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Dateiname: "); String filename = scanner.next(); BufferedReader datei = new BufferedReader(new FileReader(fileName)); double mittel = 0.0; String line = datei.readline(); while ( line!= null ) { mittel += parse(line); line = datei.readline(); mittel /= anzahl; System.out.println("Mittelwert: " + mittel); Oliver Haase Hochschule Konstanz 21

Beispiel Daten aus Datei lesen Aber: Der Versuch, die Klasse zu übersetzen (javac Mittelwert.java) liefert folgende Fehlermeldung: Konsole Mittelwert.java:16: unreported exception java.io.filenotfoundexception; must be caught or declared to be thrown new BufferedReader(new FileReader(fileName)); ^ Mittelwert.java:18: unreported exception java.io.ioexception; must be caught or declared to be thrown String line = datei.readline(); ^ Mittelwert.java:21: unreported exception java.io.ioexception; must be caught or declared to be thrown line = datei.readline(); ^ Oliver Haase Hochschule Konstanz 22

Beispiel Daten aus Datei lesen public static void main(string[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Dateiname: "); String filename = scanner.next(); BufferedReader datei = FileNotFoundException möglich new BufferedReader(new FileReader(fileName)); double mittel = 0.0; String line = datei.readline(); while ( line!= null ) { mittel += parse(line); line = datei.readline(); mittel /= anzahl; System.out.println("Mittelwert: " + mittel); IOException möglich Oliver Haase Hochschule Konstanz 23

Beispiel Daten aus Datei lesen Mögliche Lösung: throws-klausel im Kopf der main-methode: import java.io.*; import java.util.scanner; public class Mittelwert2 { private static int anzahl = 0; public static int parse(string s) { public static void main(string[] args) throws FileNotFoundException, IOException {... Effekt: Reicht die Exception durch zur aufrufenden Methode, in diesem Fall das Java-Laufzeitsystem, das das Programm mit einer Fehlermeldung abbricht. Oliver Haase Hochschule Konstanz 24

Beispiel Daten aus Datei lesen Konsole java Mittelwert2 Datei: bals.txt Exception in thread "main" java.io.filenotfoundexception: bals.txt (Das System kann die angegebene Datei nicht finden) at java.io.fileinputstream.open(native Method) at java.io.fileinputstream.<init>(unknown Source) at java.io.fileinputstream.<init>(unknown Source) at java.io.filereader.<init>(unknown Source) at Mittelwert.main(Mittelwert2.java:16) Oliver Haase Hochschule Konstanz 25

Beispiel Daten aus Datei lesen Alternative Lösung: Exceptions abfangen: public static void main(string[] args) { BufferedReader datei = null; Scanner scanner = new Scanner(System.in); boolean success; do { System.out.println("Dateiname: "); String filename = scanner.next("dateiname: "); System.out.println("Datei: " + filename); try { datei = new BufferedReader(new FileReader(fileName)); success = true; catch ( FileNotFoundException e ) { success = false; while (!success ); Oliver Haase Hochschule Konstanz 26

Beispiel Daten aus Datei lesen double mittel = 0.0; try { String line = datei.readline(); while ( line!= null ) { mittel += parse(line); line = datei.readline(); mittel /= anzahl; System.out.println("Mittelwert: " + mittel); catch ( IOException e ) { System.out.println("Fehler beim Einlesen"); System.exit(0); Oliver Haase Hochschule Konstanz 27

Have an exceptionally nice cup of coffee! Oliver Haase Hochschule Konstanz 28