7. Java Fehler und Ausnahmen

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

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

1 Fehler-Objekte: Werfen, Fangen, Behandeln

Java Einführung Exception Handling. Kapitel 17

Java : Fehlerbehandlung.

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

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

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

15 Fehlerobjekte: Werfen, Fangen, Behandeln

15 Fehlerobjekte: Werfen, Fangen, Behandeln

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

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

5. Java Arrays und Strings

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Interaktive Programme mit Scanner

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

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

Vorlesung 10. Sitzung Grundlegende Programmiertechniken

Java Fehlerbehandlung

System.out.println("TEXT");

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

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

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

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

Programmieren in Java

Methoden und Wrapperklassen

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

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

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

II.1.1. Erste Schritte - 1 -

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

Javakurs für Anfänger

Distributed Computing Group

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

12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

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

2 Eine einfache Programmiersprache

Java I Vorlesung Exceptions

Programmieren in Java

Java Einführung Methoden. Kapitel 6

Primitive Datentypen

Javakurs zu Informatik I. Henning Heitkötter

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Java - Programmierung - Prozedurale Programmierung 1

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Einstieg in die Informatik mit Java

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

4.5 Exceptions. TU Darmstadt Allgemeine Informatik II, SS 05

Verteilte Systeme - Java Networking (Sockets) 2 -

Eingabe und Ausgabe in Java. Dr. Horst Treiblmaier Abteilung für Wirtschaftsinformatik WU Wien

Welcome to java. einfach objektorientiert verteilt interpretierend robust secure architekturneutral portabel schnell parallel(multitheded)

1.7 Fehler- und Ausnahmebehandlung

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

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

Übungsstunde 10. Einführung in die Programmierung I

Programmiermethodik 1. Klausur

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Exceptions und Vererbung

Übungsstunde 10. Einführung in die Programmierung

1 Verkettete Liste (20 Punkte)

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

1 Klassen anlegen und Objekte erzeugen

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

Delegatesund Ereignisse

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

Ausdrucksbäume in verschiedenen Darstellungen

Einstieg in die Informatik mit Java

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

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

1 Klassen anlegen und Objekte erzeugen

Beispiel: DB-Mock (1/7)

Grundlagen der Informatik für Ingenieure I

Kapitel 15: Ausnahmen und

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

java.io Ziel Ressourcen Page 1 Verstehen der unterschiedlichen I / O Möglichkeiten Anwenden der Java I/ O Klassen Java Tutorial Java API Dokumentation

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Einführung in die Programmierung Blockkurs Java

Einstieg in die Informatik mit Java

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

Informatik B von Adrian Neumann

Einstieg in die Informatik mit Java

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

Programmieren in Java

2. Unterprogramme und Methoden

public static void main(string[] args) { try { kill(); } catch (RuntimeException r) { System.out.println("RunTimeException "+ r +"\n"); } catch

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Ursprünge. Die Syntax von Java. Das Wichtigste in Kürze. Konsequenzen. Weiteres Vorgehen. Rund um Java

Teil II. Objektorientierte Programmierung und objektorientierter Entwurf

1.5. Strukturierte Anweisungen

Die Syntax von Java. Ursprünge. Konsequenzen. Das Wichtigste in Kürze. Weiteres Vorgehen. Rund um Java. Sun Microsystems. Borland Software Corp

Java-Schulung Grundlagen

Interfaces und Generics

Ausgabe:

Transkript:

Fehler und Ausnahmen in Java 7. Java Fehler und Ausnahmen Fehler und Ausnahmen unterbrechen die normale Programmausführung abrupt und stellen eine nicht geplantes Ereignis dar. Ausnahmen sind böse, oder doch nicht? Fehler, Systemausnahmen, Benutzerausnahmen, Behandeln von Ausnahmen, Spezialfall Ressourcen Java ermöglicht es, solche Ereignisse abzufangen und zu behandeln (als Alternative zum Programmabsturz). Nicht behandelte Fehler und Ausnahmen werden durch den Aufrufstapel hochgereicht. 185 186 Fehler (Errors) Ausnahmen (Exceptions) Fehler treten in der virtuellen Machine von Java auf und sind nicht reparierbar. Kein Speicher mehr verfügbar Zu hoher Aufrufstapel ( Rekursion) Fehlende Programmbibliotheken Bug in der virtuellen Machine Ausnahmen werden von der virtuellen Machine oder vom Programm selbst ausgelösst und können meist behandelt werden um die Normalsituation wiederherzustellen Dereferenzierung von null Division durch 0 Schreib/Lesefehler (Dateien) Hier ist nichts mehr zu machen Computer-Hardwarefehler Aufwischen und neu einschenken Businesslogik Fehler 187 188

Arten von Ausnahmen Systemausnahmen (runtime exceptions) Können überall auftreten Können behandelt werden Ursache: Bug im Programm Benutzerausnahmen (checked exceptions) Müssen deklariert werden Müssen behandelt werden Ursache: Unwahrscheinliches, aber prinzipiell mögliches Ereignis Beispiel einer Systemausnahme 1 import java. util. Scanner; 2 class ReadTest { 3 public static void main(string[] args){ 4 int i = readint("zahl"); 5 6 private static int readint(string prompt){ 7 System.out.print(prompt + ": "); 8 Scanner input = new Scanner(System.in); 9 return input.nextint (); 10 11 Eingabe: Zahl: asdf 189 190 Nicht behandelte Fehler und Ausnahmen Ausnahme propagiert durch Aufrufstapel Das Programm stürzt ab und hinterlässt auf der Konsole eine Aufrufstapelzurückverfolgung (ab jetzt: Stacktrace). Darin sehen wir, wo genau das Programm abgebrochen wurde. Java VM Runtime ReadTest.main(); Exception in thread "main" java. util. InputMismatchException [] at java. util.scanner.nextint(scanner.java:2076) at ReadTest.readInt(ReadTest.java:9) at ReadTest.main(ReadTest.java:4) ReadTest.main ReadTest.readInt int i = readint("zahl"); return input.nextint(); Forensische Nachforschungen mit Hilfe dieser Information. Scanner.nextInt 191 192

Stacktraces verstehen Stacktraces verstehen Ausgabe: Eine unpassende Eingabe Exception in thread "main" java.util.inputmismatchexception at java. util.scanner.throwfor(scanner.java:864) at java. util.scanner.next(scanner.java:1485) at java. util.scanner.nextint(scanner.java:2117) at java. util.scanner.nextint(scanner.java:2076) at ReadTest.readInt(ReadTest.java:9) at ReadTest.main(ReadTest.java:4) aufgerufen durch Methode main auf Zeile 4. in Methode readint auf Zeile 9 193 1 import java. util. Scanner; 2 class ReadTest { 3 public static void main(string[] args){ 4 int i = readint("zahl"); 5 6 private static int readint(string prompt){ 7 System.out.print(prompt + ": "); 8 Scanner input = new Scanner(System.in); 9 return input.nextint (); 10 11 at ReadTest.readInt(ReadTest.java:9) at ReadTest.main(ReadTest.java:4) 194 Systemausnahme: Bug im Programm?! Intermezzo: Optionale Datentypen Wo ist der Fehler? private static int readint(string prompt){ System.out.print(prompt + ": "); Scanner input = new Scanner(System.in); return input.nextint(); Nicht garantiert, dass als nächstes ein int anliegt. Die Scanner Klasse bietet ein Test dafür an Optionale Datentypen ermöglichen guten Stil Java bietet Klassen (Datentypen) an um optionale Werte explizit darzustellen. : Für int OptionalInt Für double OptionalDouble Für String Optional<String> (generic, kommt später) Warum optionale Typen: Aufrufer/Benutzer kann selber entscheiden, wann und wie mit abwesenden Werten umgegangen werden soll, dies ohne Ausnahmen zu werfen. 195 196

API von OptionalInt Erstellen eines optionalen ints: Falls eine Zahl vorhanden ist: i = 5; OptionalInt opt_i = OptionalInt.of(i ); //Wert wird eingepackt Falls keine Zahl vorhanden ist: OptionalInt opt_i = OptionalInt.empty(); //Ein leerer Wert API von OptionalInt Benutzung von OptionalInt opt_i: Einen Standardwert wählen, falls leer: int i = opt_i.orelse( 1); Explizit prüfen ob eine Zahl vorhanden ist: if (opt_i.ispresent()){ int i = opt_i.getasint(); 197 198 Guter Code: Erst prüfen, optionales Resultat private static OptionalInt readint(string prompt){ System.out.print(prompt + ": "); Entweder ein int oder leer Scanner input = new Scanner(System.in); if (input.hasnextint()){ return OptionalInt.of(input.nextInt()); else { input.next(); // consume the wrong token return OptionalInt.empty(); Testet ob ein int am Input anliegt. Resultat in OptionalInt einpacken Die aufrufende Methode kann entscheiden, was dann passiert Mögliche Behandlung von optionalen Datentypen import java. util. OptionalInt; Standardwert benützen: int x = readint("x").orelse(0); Nachfragen bis es stimmt: OptionalInt opt_x; while (!( opt_x = readint("x")).ispresent()){ System.out.println("Please enter an integer" ); int x = opt_x.getasint(); 199 200

Erste Erkenntnis: Oft keine Ausnahmesituation Zweite Erkenntnis: Ausnahmen verhindern Oft sind die Sonderfälle gar kein besonderes Ereignis, sondern absehbar. Hier sollten keine Ausnahmen verwendet werden! Statt eine Systemausnahme abzuwarten aktiv verhindern, dass diese überhaupt auftreten kann. Kinder kippen Becher um. Man gewöhnt sich daran. Falsche Credentials beim Einloggen Usereingaben frühzeitig prüfen Leere Pflichtfelder in Eingabemasken Optionale Typen verwenden Nicht verfügbare Internet-Ressourcen Timeout Situationen voraussehen Timeouts Problem gelösst. Plan B für nicht verfügbare Ressourcen 201 202 Arten von Ausnahmen Beispiel einer Benutzerausnahme Systemausnahmen (runtime exceptions) private static String[] readfile(string filename){ FileReader fr = new FileReader(filename); BufferedReader bufr = new BufferedReader(fr); Benutzerausnahmen (checked exceptions) Können überall auftreten Müssen deklariert werden Können behandelt werden Müssen behandelt werden Compiler Fehler: Ursache: Bug im Programm Ursache: Unwahrscheinliches, aber prinzipiell mögliches Ereignis./Root/Main.java:9: error: unreported exception FileNotFoundException; must be caught or declared to be t FileReader fr = new FileReader(filename); ^./Root/Main.java:11: error: unreported exception IOException; must be caught or declared to be thrown String ^ 2 errors 203 204

Kurzer Blick in die Javadoc Warum eine Benutzerausnahme? Situation rechtfertigt die Benutzerausnahme: Fehlerfall ist unwahrscheinlich aber prinzipiell möglich und kann durch geeignete Massnahmen zur Laufzeit behoben werden können. Der Aufrufer einer Methode mit einer deklarierten Benutzerausnahme wird gezwungen, sich damit zu beschäftigen behandeln oder weiterreichen. 205 206 Behandeln von Ausnahmen private static String[] readfile(string filename){ try{ FileReader fr = new FileReader(filename); BufferedReader bufr = new BufferedReader(fr); catch (IOException e){ // do some recovery handling finally { // close resources Geschützter Bereich Massnahmen zur Wiederherstellung der Normalsituation Wird in jedem Fall am Schluss ausgeführt, immer! Behandlung von Ausnahmen: Propagieren stoppen! Java VM Runtime ReadTest.main ReadTest.main(); ReadTest.readFile Exception caught! BufferedReader.readLine lines = readfile("dataset.csv"); 207 208

Finally: Resourcen schliessen! In Java müssen Resourcen unbedingt geschlossen werden nach Gebrauch. Ansonsten wird Speicher nicht freigegeben. Resourcen: Dateien Datenströme GUI Elemente... Try-with-resources Anweisung Spezifische Syntax an, um Ressourcen automatisch zu schliessen: private static String[] readfile(string filename){ try ( FileReader fr = new FileReader(filename); BufferedReader bufr = new BufferedReader(fr)) { catch (IOException e){ // do some recovery handling Resourcen werden hier geöffnet Resourcen werden hier automatisch geschlossen 209 210