Programmieren in Java



Ähnliche Dokumente
Programmieren in Java

Programmieren in Java

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

Javakurs zu Informatik I. Henning Heitkötter

Programmieren in Java

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

Java: Vererbung. Teil 3: super()

Einführung in die Programmierung

Programmierkurs Java

Große Übung Praktische Informatik 1

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

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

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

Java Kurs für Anfänger Einheit 5 Methoden

Vorkurs C++ Programmierung

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Einführung in die Programmierung Blockkurs Java

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

3 Objektorientierte Konzepte in Java

Objektorientierte Programmierung

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

Software Engineering Klassendiagramme Einführung

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

Computeranwendung und Programmierung (CuP)

Distributed Computing Group

Einführung in die Java- Programmierung

Einführung in Javadoc

Grundlagen von Python

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

II.4.4 Exceptions - 1 -

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

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Client-Server-Beziehungen

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

SEP 114. Design by Contract

1. Einführung. 2. Weitere Konten anlegen

Objektorientierte Programmierung

Software Engineering Klassendiagramme Assoziationen

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

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Exception Handling, Tracing und Logging

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Delegatesund Ereignisse

Software Engineering Interaktionsdiagramme

Applet Firewall und Freigabe der Objekte

II.4.4 Exceptions - 1 -

Version 0.3. Installation von MinGW und Eclipse CDT

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

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

Beheben von verlorenen Verknüpfungen

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Studentische Lösung zum Übungsblatt Nr. 7

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Testen mit JUnit. Motivation

Benutzerverwaltung mit Zugriffsrechteverwaltung (optional)

Second Steps in eport 2.0 So ordern Sie Credits und Berichte

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2

Software-Engineering Grundlagen des Software-Engineering

Einführung in die Programmierung für Wirtschaftsinformatik

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Teil II. Objektorientierte Programmierung und objektorientierter Entwurf

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

5. Abstrakte Klassen

Kleines Handbuch zur Fotogalerie der Pixel AG

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Excel Funktionen durch eigene Funktionen erweitern.

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Folge 18 - Vererbung

Zählen von Objekten einer bestimmten Klasse

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

Erster Bug: eine Motte

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

MailUtilities: Remote Deployment - Einführung

Adminer: Installationsanleitung

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

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

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

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

ecaros2 - Accountmanager

Seriendruck mit der Codex-Software

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

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

Grundlagen. Kapitel 1

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Visual Basic Express Debugging

Log xmllog textlog Log() start(filename) add(message) end() instance() Abbildung 7-10: Die Protokollierungs-API mit einer einfachen Fassade

FORUM HANDREICHUNG (STAND: AUGUST 2013)

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

Arrays Fortgeschrittene Verwendung

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

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Neue Steuererklärung 2013 erstellen

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

Technische Dokumentation SilentStatistikTool

Lehrer: Einschreibemethoden

Alltagsnotizen eines Softwareentwicklers

Transkript:

Programmieren in Java Fehlerbehandlung und Ein- und Ausgabe

Titel der Präsentation 2 Fehler = Exceptions? Die Exception- bzw. Ausnahmebehandlung in Java ist eine spezielle Form der Fehlerbehandlung Typischerweise treten beim Programmieren folgende Fehler auf: Syntaktische Fehler: Diese werden bereits vom Compiler erkannt und das geschriebene Programm kann erst nach der Behebung vom Compiler übersetzt werden Logische Fehler und Bugs: Sind meistens schwer zu lokalisieren (z.b. + und - vertauscht). Können durch systematisches Ausgeben eigener Debug-Informationen oder mit Hilfe eines Debuggers behoben werden. Laufzeitfehler: Meistens liegt die Fehlerquelle außerhalb des Programms. Hier können Benutzerangaben oder Ressourcenanforderungen(z.B. Dateien) die Ursache sein. Diese Fehler müssen im Programm abgefangen bzw. behandelt werden.

Fehler an Ort und Stelle vermeiden Grundsätzlich sollten Fehler an dem Ort Ihres Auftretens vermieden oder behandelt werden Beispiel: Bevor man auf die Argumente eines Programmaufrufs zugreift sollte man sich vergewissern das diese auch vorhanden sind public static void main(string[] args) { if (args.length!= 1){ System.out.println("\nFalsche Anzahl Argumente!"); System.out.println("Aufruf: java Programmname <Argument>"); System.exit(0); else System.out.println(args[0]);

Fehlerbehandlung durch Codierung in Rückgabewerten Wenn eine Methode einen Fehler bemerkt kann sie durch spezielle Rückgabewerte außerhalb des normalen Wertebereichs eine Fehlerbehandlung an dem Ort ermöglichen an dem sie aufgerufen wurde. Das führt zu Problemen wenn der Rückgabewert kein primitiver Datentyp ist sondern zum Beispiel ein Objekt einer selbst definierten Klasse Dieses Vorgehen erschwert die Lokalisierung von Fehlern da scheinbar ein vernünftiges Ergebnis zurückgegeben wird public static double division(double zaehler, double nenner){ if (nenner == 0.0) return Double.NaN; else return zaehler/nenner; quotient = division(zaehler,nenner); if (Double.isNaN(quotient)){ System.out.println("Fehler: Division durch Null"); else{ System.out.println("Divisionsergebnis: "+quotient);

Exceptions Die Behandlung von Fehlern mit Exceptions soll die vorher genannten Vorgehensweisen nicht ersetzen. Exceptions dienen dazu das Auftreten und erkennen eines Fehlers räumlich im Code zu trennen Entweder soll der Code für eine bessere Übersicht nicht durch aufwendige Fehlerbehandlung unterbrochen werden Oder eine sinnvolle Fehlerbehandlung ist am ort des Auftretens nicht möglich weswegen der Fehler an einen anderen Programm-Block oder eine aufrufende Methode weitergegeben wird Beispiel: // Wandelt einen String in ein double-wert um double zahl = Double.parseDouble( 123.45 ); double zahl = Double.parseDouble( 23 Euro ); // Fehler // Fehlerbehandlung nicht innerhalb von parsedouble // Deshalb Fehlerbehandlung angepasst auf eigen Bedürfnisse direkt in der aufrufenden Methode

Exceptions erzeugen Damit eine Fehlerbehandlung nötig wird muss ein Fehler auftreten oder eine Fehlerquelle bereits vor Ausführung des Programms bekannt sein Fehler wird abgefangen durch vorher erläuterte Methoden und mit dem Schlüsselwort throw wird eine Exception ausgelöst Eine Exception ist ein Objekt der Klasse Exception oder einer abgeleiteten Klasse von Exception Dieses Verhalten wird in der Signatur der Methode bereits angekündigt mit throws <Exceptionliste> Der Ablauf des Programms wird unterbrochen und an der Stelle der Fehlerbehandlung fortgesetzt. public static double division(double zaehler, double nenner) throws Exception{ if (nenner == 0.0) throw new Exception(); else return zaehler / nenner;

Exceptions abfangen Die ausgelöste Exception wird von innen nach außen zu den umliegenden Blöcken und Methoden weitergeleitet Wird auf dem Weg ein try-block erreicht für den ein zur Exception passender catch-handler definiert ist, wird die Exception von diesem abgefangen public static void main(string[] args) { double zaehler=0,nenner=0,bruch=0; try{ zaehler = 23.56; nenner = 3.0; bruch = division(zaehler,nenner); System.out.println("\n\t"+zaehler+" : "+nenner+" = "+bruch); //Aufruf der Exception auslöst zaehler = 23.56; nenner = 0.0; bruch = division(zaehler,nenner); System.out.println("\n\t"+zaehler+" : "+nenner+" = "+bruch); catch (Exception e){ System.out.println("\n\t Fehler: Exception wurde abgefangen");

Exception-Hierarchie Es können mehrere catch-handler definiert werden wenn verschiedene Exceptions vorkommen können Exception-Objekte können implizit zu ihrem Basisobjekt umgewandelt werden, sodass der Aufruf von catch (Exception e) alle Exceptions abfängt. (Ist das ein Vor- oder Nachteil?) Catch-Handler werden in der Reihenfolge ihrer Definition durchsucht. Deshalb mit der Definition des speziellsten Handlers anfangen damit keine Verdeckung durch einen Allgemeineren erfolgt. Methoden von Exceptions stammen von der Basisklasse von Exception ; Throwable Methoden können im Catch-Handler genutzt werden durch Zugriff auf Objektreferenz e Vorhandene Methoden sind: Throwable(String meldung) //Konstruktor erlaubt die Übergabe einer Meldung Throwable getcause() // zum Verketten von Exceptions (nächste Folie) String getmessage() // Meldungstext einer Exception Void printstacktrace() // Beschreibung plus Liste der Methoden auf dem Stack String tostring() // Beschreibung der Exception (Klassennamen,Meldungstext)

Weiterleitung von Exceptions Exceptions könnn auch weitergeleitet werden ohne dass sie behandelt werden Try- und catch-block werden in dem Fall weggelassen und in der aufrufenden Methodensignatur wird mit throws <Exceptiontyp> weiter nach oben angezeigt, dass die Exception behandelt werden soll Exceptions vom Typ RuntimeException müssen nicht zwingend behandelt oder angezeigt werden (kann nützlich sein um Konflikte bei geerbten Methoden zu vermeiden) public static void einemethode(){ try{ throw new Exception("Originale Exception!"); catch (Exception e){ throw new RuntimeException(e); public static void main(string[] args) { try { einemethode(); catch (Exception e){ System.out.println(e.getCause().getMessage());

Eigene Exceptions Wenn es keine passende Exception für einen Fehler gibt sollte eine Eigene definiert werden Das bietet die Möglichkeit der Fehlermeldung weitere Informationen hinzuzufügen public class NullDivisionException extends Exception { private double zaehler; public double getzaehler(){ return zaehler; public NullDivisionException(){ public NullDivisionException(String meldung){ super(meldung); public NullDivisionException(String meldung, double zaehler){ super(meldung); this.zaehler = zaehler;

Aufruf eigene Exception public class EigeneExceptions { public static double division(double zaehler, double nenner) throws NullDivisionException{ if (nenner == 0.0) throw new NullDivisionException("Nulldivision",zaehler); else return zaehler / nenner; catch (NullDivisionException e){ System.out.println(e.getMessage()); System.out.println("Zaehler war gleich: "+e.getzaehler()); Anmerkung: Ausser try- und catch-block gibt es noch einen finally-block in dem Anweisungen abgelegt die auch ausgeführt werden wenn eine Exception ausgelöst wurde (z.b. freigeben von Ressourcen)

Dateien behandeln mit File Um Dateien zur Ein- und Ausgabe nutzen zu können wird zunächst ein Verfahren benötigt um mit dem Dateisystem umzugehen und Informationen über Dateien und Verzeichnisse zu bekommen Dazu gibt es in Java die Klasse java.io.file. File dient nicht zum eigentlichen Lesen und Schreiben von Dateien File datei = new File( vorlesung_3.txt ); Die wichtigsten Methoden von File sind: String getname() Datei/Verzeichnisname wie beim Anlegen des Objekts String getpath() Pfad wie beim Anlegen des Objekts String getabsolutepath() absoluter Pfad, wenn nicht angegeben wird das Arbeitsverzeichnis genutzt String getcanonicalpath() absoluter Pfad + Bereinigung String getparent() Verzeichnis in dem das Objekt ist, null falls unbekannt

Titel der Präsentation 13 Dateien erzeugen/löschen File-Objekte sind zunächst keine Dateien. Wenn man entsprechende File-Objekte definiert hat kann man allerdings auf echte Dateien zugreifen: boolean canread(), boolean canwrite() Überprüft Lese/Schreibrechte boolean createnewfile() true wenn die Datei noch nicht existierte und neu angelegt wurde boolean delete() true wenn die Datei gelöscht werden konnte boolean renameto(file neu) true wenn die Datei in neu umbenannt werden konnte long length() - gibt die Länge der Datei in Bytes zurück

Das Stream-Konzept Die Vorstellung von Streams ist ein Fluss eines Datenstroms(stream) von bytes zwischen einem Sender und einem Empfänger. Je nachdem wer Sender und Empfänger ist unterscheidet man in java.io.inputstream und java.io.outputstream.(bsp. FileInputStream) Basistyp dieser Klasse ist byte. Da Dateien häufig auf Text basieren gibt es zu den Stream-Klassen entsprechende Zeichenbasierte Klassen mit Reader/Writer statt Stream. (Bsp. FileReader, FileWriter) Methoden von InputStream/OutputStream: int read/write() liest/schreibt das nächste byte; Rückgabe als int oder -1 bei Misserfolg int read/write(byte[] b)- Liest/schreibt eine Anzahl bytes in das Array b/aus dem Array b; Rückgabe Anzahl an Bytes oder -1 void close() Schließt den Stream und gibt Ressourcen frei

Properties-Dateien Properties-Dateien verendet man häufig um Konstanten abzulegen damit bei einer Änderung nicht immer neu compiliert werden muss Klasse java.util.properties Dateien mit FileInputStream/FileOutputstream öffnen Zugriff mit setproperty(),getproperty(string prop), load( Inputstream Eingabe), store(outputstream ausgabe, String Kommentar), Enumeration propertynames()