Vorlesung 10. Sitzung Grundlegende Programmiertechniken

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

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

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

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

Teil II. Objektorientierte Programmierung und objektorientierter Entwurf

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

Einführung in die Programmierung Blockkurs Java

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

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

Programmieren in Java

Große Übung Praktische Informatik 1

Objektorientierte Programmierung. Kapitel 18: Exceptions II

5.13 Umgang mit Fehlern

Objektorientierte Programmierung. Kapitel 18: Exceptions II

Fehler die bei der Programmerstellung passieren können teilweise vom Compiler erkannt werden

Grundlagen der Informatik Ausnahmebehandlung & Threads

3 Objektorientierte Konzepte in Java

II.1.1. Erste Schritte - 1 -

14. Tutorium zu Programmieren

Kapitel 6. Vererbung

3 Objektorientierte Konzepte in Java

Kapitel 6. Vererbung

7. Übung zu Algorithmen und Datenstrukturen

Java-Programmierung. Remote Method Invocation - RMI

Algorithmen und Datenstrukturen

Java - Programmierung - Objektorientierte Programmierung 1

Beispiel: DB-Mock (1/7)

Themen. Web Service - Clients. Kommunikation zw. Web Services

Mobile und Verteilte Datenbanken

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

1 Polymorphie (Vielgestaltigkeit)

Spec# Einführung. Formale Software-Entwicklung Seminar SS 07 Universität Karlsruhe Hilal Akbaba

Java: Vererbung. Teil 3: super()

Aufgabe 1. »Programmieren«, WS 2006/2007. Nino Simunic M.A.

Kapitel 6. Vererbung

Distributed Computing Group

Variablen manipulieren per JDI

Programmieren in Java

Datenbankanwendungsprogrammierung Crashkurs Java

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Programmiervorkurs 2008

Java Einführung Methoden in Klassen

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Exceptions: Parameterprüfung import java.io.ioexception;

Android will doch nur spielen. Java Eine kurze Einführung

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

Informatik II. /* c) Baumstruktur in einen String schreiben und zurueckgeben */ public String tostring() {

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

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Programmentwicklung ohne BlueJ

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Java-Schulung Grundlagen

Mobile und Verteilte Datenbanken

Java für C++ Programmierer

Probeklausur: Programmierung WS04/05

5. Tutorium zu Programmieren

am Beispiel von JUnit

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

Remote Method Invocation

Universität Augsburg, Institut für Informatik Sommersemester 2003 Prof. Dr. Bernhard Bauer 18. Oktober 2003 Stefan Fischer, Dr.

UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

Graphische Benutzungsoberflächen

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

von Anja Austermann Drag and Drop

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Java Einführung Abstrakte Klassen und Interfaces

Musterlösungen zur Klausur Informatik 3

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Programmdokumentation

Datenstrukturen und Algorithmen

Repetitorium Informatik (Java)

5.4 Klassen und Objekte

3. Konzepte der objektorientierten Programmierung

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

Programmieren in Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Javakurs für Anfänger

Selbststudium OOP4 Auftrag

Tutorium Java Ein Überblick. Helge Janicke

J.5 Die Java Virtual Machine

Klassenbeziehungen & Vererbung

Programmiermethodik. Übung 13

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

Einführung in Javadoc

Vorlesung Informatik II

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

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Java Einführung Programmcode

Software Engineering Klassendiagramme Einführung

5. Threads, Serverprozesse und Benachrichtigungen

Dr. Monika Meiler. Inhalt

2.2 Prozesse in Java

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

Objektorientierte Programmierung

Einführung in die Programmierung mit Java

Transkript:

Vorlesung 10. Sitzung Grundlegende Programmiertechniken Wintersemester 2007/2008 Dozent Nino Simunic M.A. Computerlinguistik, Campus DU

Grundlegende Programmiertechniken, WS 2007/2008 Objektorientierte Ausnahmebehandlung (in Java)

Ausnahmen? Ausnahmen (engl. Exceptions) sind Fehlersituationen während der Programmausführung Java unterstützt explizite, objektorientierte Ausnahmebehandlung: JVM erkennt Ausnahmen und erzeugt entsprechende Ausnahme-Objekt. Beispiele: Division durch 0 ArithmeticException Ungültiger Array-Zugriff (z.b. ArrayIndexOutOfBoundsException Zugriff aus eine nicht vorhandene Datei FileNotFoundException arr[arr.length]) -3-

Ausschnitt der Ausnahme-Klassen-Hierarchie java.lang.object java.lang.throwable java.lang.error java.lang.exception -4- Error: Fehler innerhalb des Laufzeitsystems. Können i.d.r. nicht von behandelt werden. Beispiele: VirtualMachineErro r, ThreadDeath, Exception:»Reguläre«Fehler eines Programm. Teilung in in kontrollierte und unkontrollierte Ausnahmen: Kontrollierte Ausnahmen: Müssen vom Programm behandelt werden. Unkontrollierte Ausnahmen: Können vom Programm behandelt werden. Unkontrollierte Ausnahmen sind Subklassen von RuntimeException

Bsp. für kontrollierte Ausnahmen: FileNotFoundException java.lang.object java.lang.throwable java.lang.exception java.io.ioexception java.io.filenotfoundexception FileNotFoundException Kontrollierte (engl. checked) Ausnahme muss behandelt werden! -5-

Bsp. für unkontrollierte Ausnahmen: ArrayIndexOutOfBoundsException java.lang.object java.lang.throwable java.lang.exception java.io.runtimeexception java.io.indexoutofboundsexception java.io.arrayindexoutofboundsexception -6- ArrayIndexOutOfBoundsException Unkontrollierte (engl. unchecked) Ausnahme kann behandelt werden!

Beispiel für eine Runtime Exception (hier arithmetischer Fehler) public class Divider { public static void main(string args[]) { int a = 10, b = 0, result; result = a / b; System.out.println(result); ArithmeticException: Unterklasse vonruntimeexception Daher: unkontrollierte Ausnahme. Kann, muss aber nicht behandelt werden -7-

Javas Ausnahmemechanismus (1) Eine Methode einer Klasse erkennt eine Ausnahmesituation, erzeugt ein Objekt einer Ausnahmeklasse (Objekt enthält Information über den Ausnahme-Typ, Zustand des Programms, ) und löst damit eine Ausnahme aus. Generell: Ausnahmen sind Ereignisse, welche als Datenstruktur (Exception-Objekte) repräsentiert werden. -8-

Informationen eines Ausnahme-Objekts public class ArrayIndex { public static void main(string[] args) { int[] intarr = new int[2]; intarr[0] = 1; intarr[intarr.length] = 2; Typ der Ausnahme Typ der Ausnahme Stack-Trace Umgekehrte Auflistung unbeendeter Methodenaufrufe bis zur Ausnahme. Details -9-

Dokumentation der möglichen Fehlersituationen Standard-Klassen der Java-API dokumentieren mögliche Exceptions -10 10-

Javas Ausnahmemechanismus (2) Die Ausnahme kann entweder in derselben Methode abgefangen werden, oder an die aufrufende Methode weitergegeben werden. Die Methode, an die die Ausnahme weitergereicht wurde, kann diese Ausnahme abfangen und/oder behandeln oder wiederum weiterzureichen. Wird die Ausnahme immer nur weitergereicht und in keiner Methode behandelt, bricht das Programm mit einer Fehlermeldung ab Letzte Möglichkeit zur Behandlung: main() -11 11-

Details der Klasse Throwable Konstruktoren von Throwable Throwable( ) Throwable( String message ) Methoden von Throwable StringgetMessage( ) gibt den String aus, der beim Konstruktor übergeben wurde void printstacktrace( ) Infos zum Laufzeitverhalten beim Auftreten der Ausnahme -12 12-

Klasse Exception: Details Konstruktoren der Klasse Exception Exception() Exception( String message ) Wird ein Konstruktor aufgerufen, wird ein Objekt dieser Ausnahmeklasse erstellt, d.h. eine Ausnahme ausgelöst. Implementierung eigener Exceptions: Subklassenbildung von Exception -13 13-

Eigene Exception: Ableitung der Klasse Exception public class IDException extends Exception { public IDException() { public IDException(int id) { super("illegal id: " + id); Erbt getmessage(), printstacktrace(), -14 14-

Ausnahmebehandlung Und wie behandelt man die Fehler? JVM Standardausnahmebehandlung Stack-Trace Ausgabe, Abbruch des Programms Explizit: try-catch(-finally) Anweisung Benutzerdefiniertes Verhalten bei Ausnahmen -15 15-

try-catch-finally try { // Block, in dem der riskante Code // steht bzw. in dem abzufangende // Ausnahmen auftreten können catch (Exception e) { // Block, in dem steht, was bei Auftreten // einer Ausnahme geschehen soll. // Mehrere sukzessive catch-blöcke möglich try try {{: : Tritt im im try-block eine Ausnahme vom Typ des Parameters auf: Ausführung des catch-blocks. Anweisungen im im try-block, die hinter der Anweisung liegen, die die Ausnahme verursacht hat, werden nicht mehr ausgeführt finally { // wird in jedem Fall ausgeführt -16 16-

try-catch-finally try { catch (Exception e) { finally { -17 17- // Block, in dem der riskante Code // steht bzw. in dem abzufangende // Ausnahmen auftreten können // Block, in dem steht, was bei Auftreten // einer Ausnahme geschehen soll. // Mehrere sukzessive catch-blöcke möglich // wird in jedem Fall ausgeführt catch(parameter){... Block mit Anweisungen, die festlegen, was bei Auftreten einer Ausnahme geschehen soll. Parameter-Typ: (Subklasse von) Throwable Mehrere catch-blöcke mit unterschiedlichen Exception-Typen möglich Differenzierung von unterschiedlichen Fehlern. Bei mehreren catch-blöcken: Werden in der Reihenfolge ihres Auftretens berücksichtigt. Wurde ein catch-block ausgeführt, werden die danach stehenden Blöcke nicht mehr ausgeführt.

Beispielimplementierung mit try-catch Behandlung public class HandledDivider { public static void main(string args[]) { int a = 10, b = 0, result=0; try { result = a / b; catch ( ArithmeticException e1 ){ System.out.print("Exception detected. Reason: "+ e1.getmessage()); return; System.out.println(result); System.out.println("Good bye!"); Exception detected. Reason: / by zero Exception detected. Reason: / by zero -18 18-

(try-catch-) finally finally {... : Block mit Anweisungen, der in jedem Fall ausgeführt wird: Wenn der try-block ohne Auftreten einer Ausnahme durchlaufen wird Wenn eine Ausnahme in einem der catch-blöcke behandelt wurde Wenn eine Ausnahme in keinem der catch-blöcke behandelt wurde Wenn der try-block durch (break oder) return verlassen wurde -19 19-

finally-beispiel (und Differenzierung von Fehlern) public class HandledArrayIndex { public static void main(string[] args) { int[] intarr = new int[2]; double r=0; try { intarr[0] = 4; intarr[1] = 0; intarr[2] = 0; //r = intarr[0] / intarr[1]; catch (ArrayIndexOutOfBoundsException e1) { System.out.println("Exception detected.illegal index:"+ e1.getmessage()); return; catch (ArithmeticException e2) { System.out.println("Exception detected.illegal division:" + e2.getmessage()); return; finally { System.out.println(r); System.out.println("End of program!"); -20 20- Exception detected.illegal index:2 0.0 Exception detected.illegal division:/ by zero 0.0

Gruppierung/Verallgemeinerung von Fehlern public class HandledArrayIndex2 { public static void main(string[] args) { int[] intarr = new int[2]; double r=0; try { intarr[0] = 4; intarr[1] = 0; //intarr[2] = 0; r = intarr[0] / intarr[1]; catch (Exception e) { System.out.println("Exception detected: "+ e.getmessage()); return; finally { System.out.println(r); System.out.println("Bye"); Exception detected: / by zero -21 21-0.0

Abfangen, Signalisieren, Weitergeben von Ausnahmen Kontrollierte Ausnahmen müssen entweder abgefangen werden (try-catch) oder an den Aufrufer weitergegeben werden (throw, throws) Der Compiler achtet auf die Einhaltung dieser Regel! -22 22-

throws throws Exception-Liste Wird die Ausnahme nicht in der sie auslösenden Methode behandelt, muss sie weitergereicht werden throws-klausel in der Methodendeklaration Exception-Liste Eine oder mehrere (durch Komma getrennte) Ausnahmen. Beispiel: public void mymethod () throws ArrayIndexOutOfBoundsException, FileNotFoundException { -23 23-

Beispiel/Illustration: Weiterreichen von Exceptions void methode1() { try { methode2(); catch (ArithmeticException ae) { // Fehlerbehandlung Kein throws, da try-catch Behandlung Programmfluss void methode2() throws ArithmeticException{ methode3(); START: methode1 wird aufgerufen void methode3() throws ArithmeticException{ rechnen(); -24 24- void rechnen() throws ArithmeticException{ System.out.println(1/0); Programmfluss Ausnahme tritt auf in rechnen()-methode. Keine Behandlung: Compiler verpflichtet zu throws. Exception wird»nach oben«weitergeworfen/-gereicht. Weiterreichen/Behandlung der Exception

throw throw Ausnahmeobjekt throw unterbricht das Programm an der implementierten Stelle, um (1) die Ausnahme zu behandeln (2) oder die Weitergabe auszuführen. Weitergabe muss im Methodenkopf angegeben werden: throwsexception-liste -25 25-

throw-beispiel (1: Weiterreichen der Exception) public class Person { private int persnummer; public Person(int persnummer) throws IDException { if (persnummer < 1 persnummer > 100) { throw new IDException(persNummer); this.persnummer = persnummer; public static void main(string[] args) { try { Person p = new Person(-12); catch ( IDException e ) { e.printstacktrace(); System.exit(-1); IDException: Illegal id: id: -12-12 at at Person.<init>(Person.java:6) at at Person.main(Person.java:13) -26 26-

throw-beispiel (2: Behandeln der Exception) public class Person2 { private int persnummer; public Person2(int persnummer) { if (persnummer < 1 persnummer > 100) { try { throw new IDException(persNummer); catch (IDException e) { e.printstacktrace(); this.persnummer = persnummer; public static void main(string[] args) { Person p = new Person(-12); -27 27-

Teil-Behandlung von Exceptions (try-catch und throws) public class HandledArrayIndex { public static void main(string[] args) throws ArithmeticException { int[] intarr = new int[2]; double r=0; try { intarr[0] = 4; intarr[1] = 0; //intarr[2] = 0; r = intarr[0] / intarr[1]; catch (ArrayIndexOutOfBoundsException e1) { System.out.println("Exception detected:"+ e1.getmessage()); return; finally { System.out.println(r); System.out.println("Bye"); -28 28-

Stack-Trace public class Test { void methode1() { methode2(); void methode2() throws ArithmeticException{ methode3(); void methode3() throws ArithmeticException{ rechnen(); void rechnen() throws ArithmeticException{System.out.println(1/0); -29 29- public static void main(string[] args) { Test t = new Test(); t.methode1(); Exception in in thread "main" java.lang.arithmeticexception: / by by zero zero at at Test.rechnen(Test.java:13) at at Test.methode3(Test.java:10) at at Test.methode2(Test.java:8) at at Test.methode1(Test.java:4) at at Test.main(Test.java:19)

Diverses Morgen ab 17.00 Uhr auf»unserer«seite: Hausaufgabe http://www.uni-due.de/computerlinguistik/prog0708.shtml Themen der Klausur: Alle bisherigen Themen, inklusive Ausnahmebehandlung Struktur/Allg. Inhalte der Klausur: Multiple Choice Implementierungsbeschreibungen, Erklärungen zu OOP Kleinere Implementierungen Mini-Programm Hinweis: Es reicht nicht, sich nur die Folien durchzulesen. Verwenden Sie unterstützend eines der vorgeschlagenen Bücher und lesen Sie das/die Kapitel zum jeweiligen Konzept einer Folie. Lösen und verstehen Sie die Übungsaufgaben. Bringen Sie Ihren Studenten- und Personalausweis mit! Donnerstagsübung nächste Woche: Nach Möglichkeit vorherige Übungen besuchen. -30 30-