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



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

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

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

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

Kapitel 12: Ausnahmen und Ausnahmebehandlung

Einführung in die Programmierung für NF

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

Teil II. Objektorientierte Programmierung und objektorientierter Entwurf

Einführung in die Programmierung Blockkurs Java

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

Javakurs zu Informatik I. Henning Heitkötter

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

Einführung in die Programmierung

Objektorientierte Programmierung

Robuste Programme durch Ausnahmebehandlung

7. Übung zu Algorithmen und Datenstrukturen

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

5.13 Umgang mit Fehlern

Java: Vererbung. Teil 3: super()

SEP 114. Design by Contract

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Ausnahmen (Exceptions)

Einführung in die Programmierung mit Java

Programmierkurs Java

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

9. Fehlerbehandlung Advanced Programming Techniques. Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Einführung in die Java- Programmierung

Einstieg in die Informatik mit Java

Einführung in Javadoc

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

Programmieren in Java

Computeranwendung und Programmierung (CuP)

Delegatesund Ereignisse

Große Übung Praktische Informatik 1

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

1 Fehler-Objekte: Werfen, Fangen, Behandeln

Vorlesung 10. Sitzung Grundlegende Programmiertechniken

5.4 Klassen und Objekte

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

Zählen von Objekten einer bestimmten Klasse

Einführung in die Programmierung

Kapitel 6. Vererbung

Abschnitt 7: Weitere Konzepte der oo Programmierung in Java

Objektorientierte Programmierung. Kapitel 12: Interfaces

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

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

2A Basistechniken: Weitere Aufgaben

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

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

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

15 Fehlerobjekte: Werfen, Fangen, Behandeln

Musterlösungen zur Klausur Informatik 3

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Zuverlässigkeit von Programmen: Behandlung von Ausnahmesituationen

15 Fehlerobjekte: Werfen, Fangen, Behandeln

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

Erwin Grüner

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Typumwandlungen bei Referenztypen

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

1. Sei der String s = new String( xyzzy ) gegeben. Welcher Aufruf verändert s?

9. Ausnahmebehandlung

Remote Method Invocation

Kapitel 11: Ausnahmebehandlung

Objektorientierte Programmierung

15 Fehlerobjekte: Werfen, Fangen, Behandeln

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

15 Fehlerobjekte: Werfen, Fangen, Behandeln

Java Kurs für Anfänger Einheit 5 Methoden

5. Tutorium zu Programmieren

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

9. Ausnahmebehandlung

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

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

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Arrays Fortgeschrittene Verwendung

1 Mathematische Grundlagen

Gebundene Typparameter

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

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

II.4.4 Exceptions - 1 -

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Statuten in leichter Sprache

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

etutor Benutzerhandbuch XQuery Benutzerhandbuch Georg Nitsche

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

BEISPIELKLAUSUR Softwareentwicklung:

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

Scala kann auch faul sein

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

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

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Mögliche Implementierung von intern():

Transkript:

Kapitel 11 Fehler und Ausnahmen Fehler und Ausnahmen 1

Ziele Fehlerquellen in Programmen und bei der Programmausführung verstehen Das Java-Konzept der Ausnahmen als Objekte kennenlernen Ausnahmen auslösen können Ausnahmen behandeln können Fehler und Ausnahmen 2

Fehlerhafte Programme Ein Programm kann aus vielen Gründen unerwünschtes Verhalten zeigen. Logische Fehler beim Entwurf, d.h. bei der Modellierung des Problems: Entwurf entspricht nicht den Anforderungen. Fehler bei der Umsetzung des Entwurfs in ein Programm. Programm entspricht nicht dem Entwurf (logischer Programmierfehler), Algorithmen falsch implementiert (logischer Programmierfehler), Programm bricht ab wegen vermeidbarem Laufzeitfehler; z.b. Division durch 0, falscher Arrayzugriff, Ungenügender Umgang mit außergewöhnlichen Situationen, die nicht vermieden werden können. Fehlerhafte Benutzereingaben, z.b. Datum 31.11.2010 Fehlerhafter Dateizugriff, Abbruch der Netzwerkverbindung, Fehler und Ausnahmen 3

Robuste Programme Wir beschäftigen uns hier nicht damit, wie man logische Fehler in einem Programm finden kann. Wir konzentrieren uns hier auf das Erkennen, Vermeiden und Behandeln von Ausnahmesituationen, die zu Laufzeitfehlern führen können. Unser Ziel ist es robuste Programme zu schreiben. Definition: Ein Programm heißt robust, falls es auch beim Auftreten von Fehlern sinnvoll reagiert. Fehler und Ausnahmen 4

Beispiel: Berechnung der Fakultät. Ausnahmesituationen erkennen (1) class MyClass { public static int fact(int n) { if (n == 0) return 1; else return n * fact(n-1); class Test { public static void main(string args[]) { int m = ; int k = MyClass.fact(m); System.out.println("Fakultät von " + m + " ist " + k); Es kann zu Nichtterminierung kommen. Diese Ausnahmesituation wird in der Methode fact nicht erkannt. Fehler und Ausnahmen 5

Beispiel: Berechnung der Fakultät. Ausnahmesituationen erkennen (2) class MyClass { public static int fact_1(int n) { if (n < 0) return -1; else if (n == 0) return 1; else return n * fact(n-1); class Test { public static void main(string args[]) { int m = ; int k = MyClass.fact_1(m); System.out.println("Fakultät von " + m + " ist " + k); Ausnahmesituationen (n<0) werden in der Methode fact_1 zwar erkannt, aber nicht adäquat an den Aufrufer gemeldet. Fehler und Ausnahmen 6

class MyClass { public static int fact_2(int n) { if (n < 0) throw new IllegalArgumentException("Eingabe darf nicht kleiner als 0 sein."); if (n == 0) return 1; else return n * fact(n-1); Ausnahme auslösen class Test { public static void main(string args[]) { int m = ; int k = MyClass.fact_2(m); System.out.println("Fakultät von " + m + " ist " + k); Eine Ausnahmesituation wird in der Methode fact_2 erkannt und es wird eine Ausnahme ausgelöst ( geworfen ). Die Ausnahme enthält eine individuelle Information, die die Fehlersituation beschreibt. Wird eine Ausnahme ausgelöst, dann werden die Methode und das Programm abgebrochen und die Fehlermeldung wird auf der Konsole gemeldet. Alternativ kann die Ausnahme auch individuell im main-programm behandelt werden (vgl. später). Fehler und Ausnahmen 7

Vermeiden von Ausnahmen class MyClass { public static int fact_2(int n) { if (n < 0) throw new IllegalArgumentException("Eingabe darf nicht kleiner als 0 sein."); if (n == 0) return 1; else return n * fact(n-1); class Test { public static void main(string args[]) { int m = ; if (m >= 0) { int k = MyClass.fact_2(m); System.out.println("Fakultät von " + m + " ist " + k); Die Ausnahmesituation wird hier vermieden, indem die main-methode vor dem Aufruf der Methode fact_2 testet, ob das Argument größer gleich 0 ist. Es kann (diesbezüglich) keine Ausnahme mehr ausgelöst werden. Die Methode fact_2 beinhaltet jedoch weiterhin eine Ausnahmeerkennung mit Ausnahmeauslösung, da sie nicht sicher ist, ob sie korrekt aufgerufen wird ( defensive Programmierung). Fehler und Ausnahmen 8

Fehler- und Ausnahmenklassen in Java In Java unterscheidet man zwischen Fehlern und Ausnahmen, die beide durch Objekte repräsentiert werden. Fehler sind Instanzen der Klasse Error Ausnahmen sind Instanzen der Klasse Exception Fehler deuten auf schwerwiegende Probleme der Umgebung hin und können nicht sinnvoll behandelt werden, z.b. OutOfMemoryException. Ausgelöste Ausnahmen können vom Programmierer im Programm individuell behandelt werden. Fehler und Ausnahmen 9

Vererbungshierarchie der Fehlerklassen Object Alle Fehler- und Ausnahmeobjekte sind von Throwable abgeleitet. schwerwiegende Fehler Throwable Ausnahmen Error Exception Ausnahmen, die nicht behandelt werden müssen OutOfMemoryException... RuntimeException IOException... IllegalArgumentException ArithmeticException... NullPointerException IndexOutOfBoundsException Beispiel für eine checked Exception Fehler und Ausnahmen 10

Die Klasse Error und ihre direkten Subklassen Fehler und Ausnahmen 11

Die Klasse Exception und ihre direkten Subklassen Fehler und Ausnahmen 12

Die Klasse RuntimeException und ihre direkten Subklassen Fehler und Ausnahmen 13

Die Klasse Throwable Ausnahme- und Fehler-Objekte enthalten Informationen über Ursprung und Ursache des Fehlers. Die Klasse Throwable, von der alle Fehler- und Ausnahmeklassen abgeleitet sind, verwaltet solche Informationen und stellt zur Verfügung: eine Nachricht zur Beschreibung des aufgetretenen Fehlers, einen Schnappschuss des Aufrufstacks zum Zeitpunkt der Erzeugung des Objekts. Nützliche Methoden der Klasse Throwable: String getmessage(): gibt die Fehlermeldung zurück void printstacktrace(): gibt den Aufrufstack des Fehlers aus Fehler und Ausnahmen 14

Auslösung einer RuntimeException und Ausgabe des Aufrufstacks public class Div0 { /** Die Methode m loest wegen der Division durch 0 * eine ArithmeticException aus: */ public static void m() { int d = 0; int a = 42 / d; System.out.println("d= " + d); System.out.println("a= " + a); public static void main(string args[]) { this.m(); Java-Ausgabe mit Aufrufstack: Exception in thread "main" java.lang.arithmeticexception: / by zero at Div0.m(Div0.java:6) at Div0.main(Div0.java:11) Der Aufrufstack enthält die Folge der Methodenaufrufe, die zum Fehler geführt haben. Fehler und Ausnahmen 15

Kontrolliertes Auslösen von Ausnahmen Mittels der throw-anweisung kann man eine Ausnahme auslösen. Syntax: throw exp; Der Ausdruck exp muss eine Instanz einer von Throwable abgeleiteten Klasse (d.h. eine Ausnahme oder ein Fehlerobjekt) bezeichnen. Beispiel: throw new IllegalArgumentException(" "); Die Ausführung einer throw-anweisung stoppt den Kontrollfluss der Methode und löst die von exp definierte Ausnahme aus. Die nachfolgenden Anweisungen im Rumpf der Methode werden nicht mehr ausgeführt (wie bei return). Es kommt zu einem Abbruch des Programms, wenn die Ausnahme nicht in einer übergeordneten Methode abgefangen und behandelt wird. Fehler und Ausnahmen 16

Geprüfte Ausnahmen (Checked Exceptions) Geprüfte Ausnahmen sind in Java alle Instanzen der Klasse Exception, die nicht Objekte der Klasse RuntimeException sind. Kann während der Ausführung einer Methode eine geprüfte Ausnahme auftreten, dann muss diese entweder in der Methode behandelt werden (vgl. unten) oder es muss im Methodenkopf mit throws Ausnahmetyp explizit darauf hingewiesen werden (wird vom Compiler geprüft). Beispiel: import java.io.ioexception; public void m() throws IOException { if ( ) { throw new IOException(); public void n() throws IOException { this.m(); Fehler und Ausnahmen Man muss deklarieren, dass in dieser Methode die Ausnahme IOException auftreten kann. Da die IOException, die beim Aufruf von m() auftreten kann, hier nicht behandelt wird, muss die Methode selbst wieder eine throws-klausel deklarieren 17

Ungeprüfte Ausnahmen (Unchecked Exceptions) Ungeprüfte Ausnahmen sind genau die Instanzen von RuntimeException. Beispiele: ArithmeticException, NullPointerException, Ungeprüfte Ausnahmen müssen nicht im Methodenkopf explizit deklariert werden (sie können es aber). Ungeprüfte Ausnahmen müssen nicht behandelt werden (sie können es aber). Fehler und Ausnahmen 18

Benutzerdefinierte Ausnahmeklassen Mittels Vererbung kann man eigene Ausnahmeklassen definieren. Beispiel: Klassen BankKonto und SparKonto. Es soll nicht möglich sein, ein SparKonto zu überziehen. Wir definieren dazu eine checked Exception, die beim Versuch das SparKonto zu überziehen, geworfen werden soll: public class KontoUngedecktException extends Exception { private double abhebung; public KontoUngedecktException(String msg, double abhebung) { super(msg); // Konstruktor von Exception nimmt Nachricht this.abhebung = abhebung; public double getabhebung() { return abhebung; Fehler und Ausnahmen 19

Auslösen einer benutzerdefinierten Ausnahme public class BankKonto { public void abheben(double x) throws KontoUngedecktException { kontostand = kontostand - x; public class SparKonto extends BankKonto { public void abheben(double x) throws KontoUngedecktException { if (getkontostand() < x) { throw new KontoUngedecktException("Sparkonten dürfen nicht überzogen werden.", x); super.abheben(x); Fehler und Ausnahmen 20

Behandlung von Ausnahmen Ausnahmebehandlung geschieht in Java mit Hilfe der try-anweisung. Damit können Ausnahmen abgefangen werden. try { // Block fuer normalen Code catch (Exception1 e) { // Ausnahmebehandlung fuer Ausnahmen vom Typ Exception1 catch (Exception2 e) { // Ausnahmebehandlung fuer Ausnahmen vom Typ Exception2 Zunächst wird der try-block normal ausgeführt. Tritt im try-block keine Ausnahmesituation auf, so werden die beiden Blöcke zur Ausnahmebehandlung ignoriert. Tritt im try-block eine Ausnahmesituation auf, so wird die Berechnung dieses Blocks abgebrochen. Ist die Ausnahme vom Typ Exception1 oder Exception2, so wird der Block nach dem jeweiligen catch ausgeführt. Ansonsten ist die Ausnahme unbehandelt. Fehler und Ausnahmen 21

Behandlung von Ausnahmen: Beispiel Konto public static void main(string[] args) { SparKonto konto = new SparKonto(5, 1); // 5 Euro, 1% Zinsen String einlesebetrag = JOptionPane.showInputDialog("Betrag zum Abheben?"); double betrag = Double.parseDouble(einleseBetrag); try { konto.abheben(betrag); catch (KontoUngedecktException e) { System.out.println(e.getMessage()); System.out.println("Der Abhebungsbetrag " + e.getabhebung() + " war zu hoch. "); Fehler und Ausnahmen 22

Behandlung von Ausnahmen: finally Manchmal möchte man nach der Ausführung eines try-blocks bestimmte Anweisungen ausführen, egal ob eine Ausnahme aufgetreten ist. Beispiel: Schließen einer im try-block geöffneten Datei. Das kann man mit einem finally-block erreichen, der in jedem Fall nach dem try-block und der Ausnahmebehandlung ausgeführt wird. try { // Block fuer normalen Code catch (Exception1 e) { // Ausnahmebehandlung fuer Ausnahmen vom Typ Exception1 catch (Exception2 e) { // Ausnahmebehandlung fuer Ausnahmen vom Typ Exception2 finally { /* Code, der in jedem Fall ausgeführt werden soll (nach normalem Ende, nach Ausnahmebehandlung und nach Auslösung einer nicht behandelten Ausnahme). */ Fehler und Ausnahmen 23

Ablauf in einem Geldautomaten: public static void main(string[] args) { Beispiel für finally SparKonto konto = new SparKonto(5, 1); // 5 Euro, 1% Zinsen String einlesebetrag = JOptionPane.showInputDialog("Betrag zum Abheben?"); double betrag = Double.parseDouble(einleseBetrag); try { konto.abheben(betrag); catch (KontoUngedecktException e) { System.out.println(e.getMessage()); System.out.println("Der Abhebungsbetrag " + e.getabhebung() + " war zu hoch. "); finally { System.out.println("Bitte entnehmen Sie ihre Karte."); Fehler und Ausnahmen 24

Ausnahmebehandlung bei fehlerhafter GUI-Eingabe (1) public class ExceptionTestFrame extends JFrame implements ActionListener { private JButton testbutton; private JTextArea ausgabebereich; public ExceptionTestFrame() {... this.testbutton.addactionlistener(this); public void actionperformed(actionevent e) { Object source = e.getsource(); if (source == this.testbutton) { this.test(); Fehler und Ausnahmen 25

Ausnahmebehandlung bei fehlerhafter GUI-Eingabe (2) private void test() { int wert; boolean inputok = false; while (!inputok) { String einlesewert = JOptionPane.showInputDialog("Wert?"); try { wert = Integer.parseInt(einleseWert); inputok = true; catch (NumberFormatException e) { this.ausgabebereich.settext("falsche Eingabe: Kein Integer!"); //Ende while this.ausgabebereich.settext("eingabe war " + wert); //Ende Methode test //Ende Klasse ExceptionTestFrame Fehler und Ausnahmen 26

Zusammenfassung Ausnahmen werden in Java durch Objekte dargestellt. Methoden können Ausnahmen auslösen implizit durch einen Laufzeitfehler oder explizit mit throw und damit abrupt terminieren. Ausnahmen können mit catch behandelt werden, so dass sie nicht zu einem Abbruch des Programms führen. Wir unterscheiden geprüfte und ungeprüfte Ausnahmen. Geprüfte Ausnahmen müssen abgefangen werden oder im Kopf der Methode wiederum deklariert werden. In jedem Fall ist es am Besten Ausnahmen zu vermeiden, wenn es in der Macht des Programmierers liegt. Defensive Programme sehen auch für vermeidbare Ausmahmesituationen das Werfen von Ausnahmen vor (was dann hoffentlich nie nötig ist). Fehler und Ausnahmen 27