Javakurs für Anfänger

Ähnliche Dokumente
Einführung in die Programmierung mit Java

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

Vorlesung 10. Sitzung Grundlegende Programmiertechniken

Kapitel 12: Ausnahmen und Ausnahmebehandlung

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

Objektorientierte Programmierung. Kapitel 9: Exceptions I

9. Ausnahmebehandlung

Abschnitt 7: Weitere Konzepte der oo Programmierung in Java

15 Fehlerobjekte: Werfen, Fangen, Behandeln

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

1 Fehler-Objekte: Werfen, Fangen, Behandeln

Kapitel 9. Ausnahmebehandlung in Java. Skript zur Vorlesung Einführung in die Programmierung

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

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

Ausnahmen (Exceptions)

Selectionsort Beispiel

15 Fehlerobjekte: Werfen, Fangen, Behandeln

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

Exceptions. INE2 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert, E. Bazzi

9. Ausnahmebehandlung

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

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

15 Fehlerobjekte: Werfen, Fangen, Behandeln

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

15 Fehlerobjekte: Werfen, Fangen, Behandeln

Übungen zu Middleware Universität Erlangen-Nürnberg Informatik 4, 2007 Z-Java-Exceptions.fm

Vorlesung Informatik II

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

Kapitel 11: Ausnahmebehandlung

Javakurs für Anfänger

EINFÜHRUNG IN DIE PROGRAMMIERUNG

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

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

II.4.4 Exceptions - 1 -

Java Einführung Exception Handling. Kapitel 17

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

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

Mögliche Implementierung von intern():

Java : Fehlerbehandlung.

Objektorientierte Programmierung. Kapitel 9: Exceptions I

Javakurs für Anfänger

Komponenten-basierte Entwicklung Teil 4: Exceptions

Programmiertechnik Ausnahmen

Liste Programmieren Java Überblick

Javakurs für Anfänger

Zuverlässigkeit von Programmen: Behandlung von Ausnahmesituationen

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

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Javakurs für Anfänger

Javakurs für Anfänger

Javakurs für Anfänger

Javakurs für Fortgeschrittene

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

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

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

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

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

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

Einführung in die Programmierung

Einführung in die Programmierung für NF

Einstieg in die Informatik mit Java

Wo sind wir? Rudolf Berrendorf FH Bonn-Rhein-Sieg Programmiersprache Java 280

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

Java Fehlerbehandlung

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

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

Ausnahmen. Gilbert Beyer und Annabelle Klarl. Einführung in die Informatik. Zentralübung zur Vorlesung Einführung in die Informatik

Robuste Programme durch Ausnahmebehandlung

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

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

Javakurs für Anfänger

II.4.4 Exceptions - 1 -

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

Javakurs für Anfänger

Softwareentwicklung II (IB) Exceptions. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

9. Ausnahmebehandlung

Johannes Unterstein - TINF16 - Java - Sommersemester 2017 JAVA. Weiterführende Spracheigenschaften

Exceptions. Softwareentwicklung II (IB) Prof. Dr. Oliver Braun Letzte Änderung: :23. Exceptions 1/37

Javakurs für Anfänger

7. Java Fehler und Ausnahmen

Einführung in die Informatik

Exceptions - Klausuraufgaben

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

Programmierung für Mathematik HS11

Objektorientierte Programmierung. Kapitel 13: Exceptions

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

Transkript:

Javakurs für Anfänger Einheit 13: Ausnahmen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Heutige Agenda Ausnahmen (Exceptions) Motivation Fehlerbehandlung Klassenhierarchie Checked vs. Unchecked Eigene Ausnahmen schreiben und werfen Praxis: Übung 1 Übung 2 Lernziele Einführung in die Fehlerbehandlung unter Java Mit Fehlern umgehen und diese behandeln können Eigene Ausnahmen definieren und verwenden können 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 2

Motivation Fehler sind unvermeidbar und gehören zum Programmieren dazu. Programmierfehler: Sollten im Programm behoben werden (Debugging) Benutzer-/Laufzeitfehler: Sollten abgefangen und behandelt werden Bsp.: Benutzer will die Wurzel einer negativen Zahl berechnen lassen Erfordert Ausnahmebehandlung, damit das Programm nicht abstürzt Kostet viel Zeit und Ressourcen (Tests) Ziel: Fehlerfreies Produkt! 1. Möglichkeit: Mögliche Fehler per if-abfragen abfangen: // Falls kein Text eingegeben wurde: if(tf_user.gettext().equals("")){ msg.settext("es wurde kein Nutzername eingegeben!"); 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 3

Exceptions als Reaktion auf Fehler Mit if-abfragen könnten wir theoretisch arbeiten, aber Sehr umständlich und aufwendig Es müsste jede Möglichkeit für jedes Textfeld implementiert werden! Textfeld leer Eingabe hat falsches Format Eingabe ist ungültig etc. Daher nutzen wir Exceptions (Ausnahmen) für die Behandlung von Fehlern. Typisches Beispiel: Nutzer gibt eine Kommazahl, statt einer Ganzzahl ein: Bitte geben Sie eine Ganzzahl ein: 4.6 Exception in thread "main" java.lang.numberformatexception: For input string: "4.6" at java.lang.numberformatexception.forinputstring(unknown Source) at java.lang.integer.parseint(unknown Source) at java.lang.integer.parseint(unknown Source) at Exceptions.FehlerhafteEingabe.main(FehlerhafteEingabe.java:12) 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 4

Behandlung von Fehlern Solche fehlerhaften Eingaben führen dazu, dass der weitere Programmablauf nicht ausgeführt wird und stattdessen implizit eine Excepetion ausgelöst wird. Wenn wir solche Exceptions nicht behandeln (abfangen), dann geht es in unserem Programm hier nicht weiter => Das Programm bricht (teilweise) ab. Daher müssen wir auf mögliche Fehler/Ausnahmen reagieren: Mittels try catch können wir auftretende Exceptions abfangen: try{ <<Block>> ; Mit dem Schlüsselwort try wird der Versuch unternommen, den Programmcode im einschließenden Block, wie vorgesehen, auszuführen. catch (Exception e){ <<Block>>; Die catch-anweisung nach dem try-block dient der Fehlerbehandlung, falls ein Fehler innerhalb des try-block mit dem Typ Exception aufgetreten ist Falls kein Fehler im try-block aufgetreten ist, wird der catch-block übersprungen! 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 5

Beispiel mit try/catch public class FehlerhafteEingabe { public static void main(string[] args) { Scanner scan = new Scanner(System.in); System.out.println("Bitte geben Sie eine Ganzzahl ein: "); int eingabe=0; boolean show_ausgbabe=true; try { Hier kann Fehler vom Typ NumberFormatExcpetion auftreten! Daher mit try umschließen eingabe = Integer.parseInt(scan.next()); Falls NumberFormatExcpetion catch (NumberFormatException e) { aufgetreten ist: System.out.println("Fehlerhafte Eingabe!"); show_ausgbabe=false; catch-block ausführen! if(show_ausgbabe) System.out.println("Ihre Eingabe war: "+eingabe); Bitte geben Sie eine Ganzzahl ein: 3 Ihre Eingabe war: 3 Bitte geben Sie eine Ganzzahl ein: 4.5 Fehlerhafte Eingabe! 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 6

Eine Ausnahme ist letztendlich auch wieder ein Objekt der Klasse Exception oder einer Unterklasse und kann ganz normal mit new erzeugt werden Exceptions erben von Throwable Die Klasse Exception selbst erbt von der Klasse Throwable, die zahlreiche Methoden bereitstellt Neben Exceptions gibt es die Klasse Error: Ein Error bezeichnet ernsthafte Problem wie bspw.: Speicherzugriffsfehler und sollte nicht durch die Anwendung behandelt werden! Quelle: http://openbook.rheinwerk-verlag.de/javainsel9/bilder/exceptionthrowableerroruml.gif 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 7

Exceptions stammen also immer von Throwable ab und können über die Klassenhierarchie immer feiner spezifiziert sein: Ein kleiner Ausschnitt: Klassenhierarchie von Exceptions Quelle: http://openbook.rheinwerk-verlag.de/javainsel9/bilder/exceptionsuml.gif 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 8

Mit catch auf bestimmte Fehler oder Fehlergruppen reagieren Durch die Klassenhierarchie können wir mittels catch(fehlertyp f) auch auf einzelne spezielle Fehler reagieren Bsp.: NumberFormatException Unterklasse von java.lang.illegalargumentexception Unterklasse von java.lang.runtimeexception Oder eben auf ganze Fehlergruppen: Bsp.: IllegalArgumentException Reagiert auch auf: IllegalChannelGroupException, IllegalCharsetNameException, IllegalFormatException, IllegalSelectorException, IllegalThreadStateException, InvalidKeyException, InvalidOpenTypeException, InvalidParameterException, InvalidPathException, KeyAlreadyExistsException, Mittels catch(exception e){ reagieren wir auf jeglichen Fehler! Eher vermeiden! Lieber Fehler im Detail behandeln 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 9

Beispiel für detaillierte Fehlerbehandlung public class FehlerhafteEingabe { public static void main(string[] args) { Scanner scan = new Scanner(System.in); System.out.println("Bitte geben Sie eine Ganzzahl ein: "); int eingabe=0; boolean show_ausgbabe=true; try { eingabe = Integer.parseInt(scan.next()); catch (NumberFormatException e) { System.out.println("Fehlerhafte Eingabe!"); show_ausgbabe=false; catch (IllegalArgumentException e){ e.printstacktrace(); show_ausgbabe=false; if(show_ausgbabe) System.out.println("Ihre Eingabe war: "+eingabe); Auf einen try Block können mehrere catch-blöcke folgen Mit dem speziellsten Fehler beginnen! Dann in der Hierarchie immer höher gehen! Der erste catch-block der passt wird ausgeführt! Die anderen werden dann übersprungen! 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 10

Das Schlüsselwort finally Try-catch Konstrukte können mit dem Schlüsselwort finally ergänzt werden Im finally-block wird auf jeden Fall der Code ausgeführt, selbst wenn keine Ausnahme auftritt Motivation: Aufräumarbeiten o. Ä. try { int eingabe = Integer.parseInt(scan.next()); System.out.println("Ihre Eingabe war: "+eingabe); catch (NumberFormatException e) { System.out.println("Fehlerhafte Eingabe!"); catch (IllegalArgumentException e){ e.printstacktrace(); finally{ System.out.println("Programm ist zu Ende"); Bitte geben Sie eine Ganzzahl ein: 3 Ihre Eingabe war: 3 Programm ist zu Ende Bitte geben Sie eine Ganzzahl ein: 3.4 Fehlerhafte Eingabe! Programm ist zu Ende 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 11

Überprüft oder nicht? Ausnahmen können entweder nicht überprüft (unchecked) sein Können abgefangen werden, müssen aber nicht Idee: Ausnahmen, die auf einen Programmierfehler folgen, müssen nicht überprüft werden Alle Arten von java.lang.runtimeexception überprüft (checked) sein Müssen abgefangen oder explizit als möglich deklariert sein I.d.R. Ausnahmen, die ab und zu unvermeidlich sind Bsp.: FileNotFoundException, IOException, //Fehlermeldung: unreported exception java.io.ioexception; must \ be caught or declared to be thrown 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 12

Beispiel für checked Exceptions Beispiel: Thread.sleep(long millis) wirft eine InterruptedException Diese ist checked und muss behandelt werden! Dazu 2 Möglichkeiten: Der Methodenaufruf sleep() muss mit dem entspr. try-catch Block umgeben werden Die umgebene Methode muss explizit deklarieren, dass diese Ausnahme innerhalb ihres Rumpfs geworfen werden kann. Dann muss diese Ausnahme beim Methodenaufruf der umgebenen Methode abgefangen oder wieder deklariert werden 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 13

Beispiel für checked Exceptions public class FehlerhafteEingabe { public static void schlafen(int dauer){ try { Thread.sleep(dauer); catch (InterruptedException e) { e.printstacktrace(); public static void main(string[] args) { FehlerhafteEingabe.schlafen(2000); //... 1. Möglichkeit: Der Aufruf der Methode sleep() wird mit einem try-catch Block umzingelt, welcher die InterruptedExcpetion behandelt public class FehlerhafteEingabe { public static void schlafen(int dauer) throws InterruptedException{ Thread.sleep(dauer); public static void main(string[] args) { try { FehlerhafteEingabe.schlafen(2000); catch (InterruptedException e1) { e1.printstacktrace(); //... 2. Möglichkeit: Die Methode schlafen() deklariert explizit mit throws die InterruptedException Beim Methodenaufruf von schlafen() muss dann der Fehler abgefangen oder die umgebene Methode deklariert den Fehler mittels throws Statement 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 14

Eigene Ausnahmen definieren Wie ganz normale Klassen können wir auch eigene Ausnahmeklassen definieren Dabei erben wir von der entsprechenden Exception, um uns in die Klassenhierarchie an der gewünschten Stelle einzuordnen. Bsp.: Wir definieren eine eigene RuntimeException (unchecked) public class FalseSquareRootException extends RuntimeException{ public FalseSquareRootException(){ super("kann Wurzel nicht berechnen"); Eigene Exception Klasse: Leerer Konstruktor belegt entsprechende Fehlermeldung public static double berechnewurzel(double x){ if(x<0){ throw new FalseSquareRootException(); return Math.sqrt(x); Die eigene Exception wird explizit geworfen mittels throw, wenn Wurzel auf einer negativen Zahl berechnet werden soll. Kann wieder abgefangen werden! Exception in thread "main" Exceptions.FalseSquareRootException: Kann Wurzel nicht berechnen at Exceptions.FehlerhafteEingabe.berechneWurzel(FehlerhafteEingabe.java:16) at Exceptions.FehlerhafteEingabe.main(FehlerhafteEingabe.java:25) 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 15

Weitere Infos Jede Ausnahme kennt aus der geerbten Klasse Throwable u.a. die Methoden: printstacktrace(); Gibt den Typ und den Text der Fehlermeldung aus und zudem die Folge der Methodenaufrufe bis zur ihrer Auflösung. Standardausgabe (auch von Eclipse) String getmessage(); Gibt den String der reinen Fehlermeldung zurück try { result = FehlerhafteEingabe.berechneWurzel(-1); System.out.println(result); catch (FalseSquareRootException e2) { e2.printstacktrace(); Ausgabe: Exceptions.FalseSquareRootException: Kann Wurzel nicht berechnen at Exceptions.FehlerhafteEingabe.berechneWu rzel(fehlerhafteeingabe.java:16) at Exceptions.FehlerhafteEingabe.main(Fehle rhafteeingabe.java:27) // oder: catch (FalseSquareRootException e2) { System.out.println(e2.getMessage()); Ausgabe: Kann Wurzel nicht berechnen 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 16

Programmieraufgabe zu Exceptions Erstellen Sie ein neues Eclipse-Projekt Uebung13 und schreiben Sie folgendes Programm: Legen Sie eine Array-Referenz vom Typ double[] an Fordern Sie nun den Benutzer auf, eine Ganzzahl einzugeben, welche die Größe des Arrays festlegen soll Erzeugen Sie nun das Array mit der Größe, die Sie vom Benutzer erhalten haben. Welche Fehler können dabei auftreten? Fange Sie jeden einzelnen Fehler gesondert in einem Catch-Block ab und reagieren Sie gesondert auf die falsche Nutzereingabe. Schreiben Sie auf jeden Fall Vielen Dank für Ihre Eingabe! auf die Konsole am Ende des Programms. 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 17

Programmieraufgabe zu Exceptions Schreibe Sie ein weiteres Programm in Ihrem zuvor erstellten Projekt Uebung13 : Schreiben Sie eine eigene Klasse Bruch, welche einen Dezimalbruch darstellen soll Die Klasse hat die beiden Instanzvariablen: Double zähler Double nenner Außerdem einen Konstruktor, welcher die beiden Instanzvariablen belegt Und einen leeren Konstruktor Daneben besitzt die Klasse die Methoden Setter- und Getter double berechnebruch(); Erzeugen Sie nun in Ihrer Main-Methode 2 Instanzen der Klasse Bruch Einmal mit dem leeren Konstruktor Und einmal mit dem Konstruktor, der Werte für Zähler und Nenner bekommt. Was passiert jeweils, wenn Sie die Methode berechnebruch() für Ihre beiden Instanzen aufrufen und sich das Ergebnis auf der Konsole anzeigen lassen wollen? 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 18

Fortführung der Aufgabe: Programmieraufgabe zu Exceptions Schreiben Sie einen eigenen Fehler DivisionByZeroException und geben Sie diesem eine eindeutige Fehlermeldung mit. Bsp.: Hast du in der Schule nicht gelernt, dass man nicht durch 0 teilen darf? Werfen Sie den Fehler, wenn die Methode berechnebruch() durch 0 teilen will. Fangen Sie den Fehler an einer geeigneten Stelle ab und geben Sie statt dem Ergebnis die Fehlermeldung aus! 28.01.2016 Javakurs 13: Exceptions - Lorenz Schauer 19