Exception Handling in Java

Slides:



Advertisements
Ähnliche Präsentationen
M a r c – o l i v e r p a h l Informatik I – Kapitel 7 Klassen und höhere Datentypen Zusammenfassung des Kapitel 7 Küchlin, Weber, Einführung in die Informatik,
Advertisements

der Universität Oldenburg
der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Zusammenfassung des Kapitels 8
der Universität Oldenburg
Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität.
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik F Verteilte Software - Java.
Verteilte Software - Java - Prozedurale Programmierung 1
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Ausnahmen HS Merseburg (FH) WS 06/07.
Binäre Bäume Richard Göbel.
Java: Objektorientierte Programmierung
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
IF-ELSE-IF-Ketten Weiter mit PP..
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
M a r c – o l i v e r p a h l Die ObjektOrientierte Mühle Das Beispiel soll noch einmal das Konzept der Objektorientiertheit erläutern. Dabei werden außerdem.
Dynamische Webseiten Java servlets.
Objektorientierte Programmierung JDK-Klassenbibliothek
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
DVG Ausnahmen. DVG Was sind Programmfehler? 4 Programm erzielt gar kein Ergebnis. 4 Berechnetes Ergebnis stimmt nicht mit dem erwarteten.
DVG Ausnahmen1 Ausnahmen. DVG Ausnahmen 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht.
DVG Einführung in Java1 Einführung in JAVA.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Thema: Fibonacci-Zahlen
Bestimmung des ggT zweier Zahlen
Verzweigung.
Vererbung Einfache Vererbung – Erben von abstrakten Klassen – Implementieren eines Interfaces.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Rekursive Funktionen (Fakultät)
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
IT2 – WS 2005/20061Oct 10, 2005 Externes Verhalten – Quelltext (source code) Durch Aufrufe der Konstruktoren und Methoden kann das externe Verhalten (=die.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Grundlagen der Programmierung
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Objektorientiertes Konstruieren
Die Klasse String und ihre Methoden
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014 Referenzdatentypen
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Robuste Programme durch Ausnahmebehandlung
Übung Informatik I exercise01. 2 Inhaltsübersicht Nachbesprechung Übung 1 Individuelle Fragen/Bemerkungen.
© 2004 Pohlig Informatik Kurse © 2004 Pohlig Informatik Kurse Der Tramp tanzt die Rekursion zünderUntersuchen(…) Basisfall Rückmeldung:
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
Grundkurs Informatik mit Java
Implementieren von Klassen
 Präsentation transkript:

Exception Handling in Java Seminar aus Softwareentwicklung Norbert Wiener

Ziele von Exception Handling Programme robuster machen gegen: • fehlerhafte Eingaben • Gerätefehler (Defekte, Platte voll, ...) • Programmierfehler (z.B. Division durch 0) Trennung zwischen Algorithmus und Fehlerbehandlung Fehlerbehandlung durch Compiler überprüfbar machen

Auslösen von Exception explizite Ausnahmen: „throw“ Anweisung im Code. implizite Ausnahmen durch die JVM - Divison durch 0 => ArithmeticException - Zugriff über null-Ref. => NullPointerException - Ungültige Konvertierung => ClassCastException setPassword(String pw) { ...... if(pw.length() < 5) throw new Exception(„mind. 5 Zeichen“); ....... } int intDiv (int i, int j) { return i/j; }

try-catch-finally Syntax Anweisungen; } catch (Ausnahme1 a1) { Fehlerbehandlung1; } catch (Ausnahme2 a2) { Fehlerbehandlung2; } finally { Aufräumen; } Nach einem try-Block muss mindestens ein catch-Block folgen! Der finally-Block ist optional Bei mehreren catch-Blöcken beginnt die Suche der Ausnahmenbehandlung von oben nach unten.

Finally wird immer ausgeführt! Beispiel class Catch{ public static void main(String[] args){ try{ int i = Integer.parseInt(args[0]); System.out.print("i= "+i); }catch(ArrayIndexOutOfBoundsException e){ System.out.print("Parameter vergessen!"); }catch(NumberFormatException e){ System.out.print(" kein int-Wert!"); }finally{ System.out.println(" finally!"); } Catch 123 i= 123 finally! Catch xy kein int-Wert! finally! Catch Parameter vergessen! finally! Finally wird immer ausgeführt!

Ausnahme-Klasse definieren class MyException extends Exception{ } Eigener Exceptiontyp (indirekt) von Throwable ableiten. class MyException extends Exception{ public MyException() { super(); } public MyException(String msg) { super(msg); Konstuktor ohne Parameter Konstruktor mit Fehlermeldung

Die throws-Klausel Weitergabe der Exception an die aufrufende Methode setPassword(String pw) { try{ if(pw.length() < 5){ throw new Exception(„Fehler“); } }catch(Exception e){ Ausnahme behandeln! } } Weitergabe der Exception an die aufrufende Methode static setPassword(String pw) throws Exception { if(pw.length() < 5){ throw new Exception(„Fehler“); }....... } Try{ setPassword(pw); }catch(Exception e){ Ausnahme behandeln! }

throws Beispiel C(int x) throws Exc1, Exc2 ,Exc3 { try{ if(x==1){ throw new Exc1("F."); }else if(x==2){ throw new Exc2(); }else if(x==3){ throw new Exc3(); }else{ throw new Exc4(); } }catch(Exc4 e){ ....println("C"); ........ A(int x) throws Exc1{ try{ B(x); }catch(Exc2 e){ ...println("A"); }finally{ ..println("finA") } ........ B(int x) throws Exc1, Exc2{ try{ C(x); }catch(Exc3 e){ ...println("B"); }finally{ ...println("finB"); } ..Main(...){ ...... try{ A(x); }catch(Exc1 e){ ..print("Main"); } ........ x=1 finB finA Main x=2 finB A finA x=3 B finB finA x=4 C finB finA

Debugging von Ausnahmen e.getMessage() e.printStackTrace() class Test{ static int x =1; public static void main(String args[]) { try{ A a= new A(x); }catch(Exc1 e){ System.out.println("Main"); System.out.println(e.getMessage()); e.printStackTrace(); } finB finA Main Fehler! Exc1: Fehler! at C.<init>(C.java:6) at B.<init>(B.java:4) at A.<init>(A.java:4) at Test.main(Test.java:6)

NullpointerException FileNotFoundException Klassenhierarchie Throwable Error Exception VirtualMachineError LinkageError RuntimeException IOException NullpointerException FileNotFoundException OutOfMemoryError NoSuchFieldError unchecked checked

Ausnahmen des Typs Error sind nicht vernünftig zu behandeln. Die Error-Klasse VirtualMachineError InternalError OutOfMemoryError StackOverflowError UnknownError LinkageError NoSuchMethodError NoSuchFieldError AbstraktMethodError ThreadDeath Ausnahmen des Typs Error sind nicht vernünftig zu behandeln.

Die Exception Klasse IOException FileNotFoundException SocketException EOFException RemouteException UnknownHostException InterruptedException NoSuchFieldException ClassNotFoundException NoSuchMethodException Diese Exception müssen behandelt werden! (ausgenommen RuntimeException)

Exception auf ByteCode Ebene void f() { try { throw new Exception(); } catch (Exception e) { System.out.println(e); } Exception e; e = new Exception(); throw e; Adr.-> Exception Adr.-> Exception Operanden-Stack Objekt im Speicher allokieren Objektreferenz auf OperantenStack 0 new #2 <Class Exception> 3 dup 4 invokespecial <init> 7 athrow 8 astore_1 9 getstatic out:System 12 aload_1 13 invokevirtual println 16 return Referenzadresse wird dupliziert Konstruktor wird ausgeführt Exception Table: From To Target Type 0 8 8 Exception

wird an die Vorgängermethode delegiert! Beispiel static int remainder(int dividend, int divisor) throws OverflowException, DivideByZeroException { if ((dividend == Integer.MIN_VALUE) && (divisor == -1)) { throw new OverflowException(); } try { return dividend % divisor; catch (ArithmeticException e) { throw new DivideByZeroException(); Exception Handling wird an die Vorgängermethode delegiert!

Beispiel Exception Table: 1 ldc #1 <Integer - 2147483648> 0 iload_0 1 ldc #1 <Integer - 2147483648> 3 if_icmpne 19 6 iload_1 7 iconst_m1 8 if_icmpne 19 11 new #4 <Class OverflowException> 14 dup 15 invokespecial #10 <Method OverflowException()> 18 athrow 19 iload_0 20 iload_1 21 irem 22 ireturn 23 pop 24 new #2 <Class DivideByZeroE.> 27 dup 28 invokespecial #9 <Method DivideByZeroException()> 31 athrow static int remainder(int dividend, int divisor) throws OverflowException, DivideByZeroException { if ((dividend == Integer.MIN_VALUE) && (divisor == -1)) { throw new OverflowException(); } try { return dividend % divisor; catch (ArithmeticException e) { throw new DivideByZeroException(); Exception Table: From To Target Type 19 23 23 ArithmeticException

Danke für die Aufmerksamkeit