Folien



(letzte Synchronisation der PDF-Präsentation: 02.08.2017)

Falls keine PDF-Präsentation zu sehen ist, klicken Sie zum Download hier: Direktdownload PDF-Präsentation

Übungen

Alle Übungen finden Sie in der Materialsammlung (dort auch alle zusätzlichen Dateien wie Bilder, Klassendiagramme oder HTML-Vorlagen!).

Die aktuelle Übung können Sie hier als txt-File herunterladen.


***** Übungen: Java - Fehlerbehandlung *****

Java_31-fehlerbehandlung-1

Importieren Sie die beiden Projekte, die im Verzeichnis java31_fehlerbehandlung_tests liegen (oder direkt alle Dateien als 16java/java31_fehlerbehandlung_tests.zip ). Es sind die Projekte

java31_agent_MIT_Fehlerbehandlung
java31_agent_OHNE_Fehlerbehandlung)

Sie können auch direkt im Verzeichnis /kompiliert/ die JARs in den Unterverzeichnissen laufen lassen.

a) Starten Sie zuerst java31_agent_OHNE_Fehlerbehandlung. Beachten, Sie, was nach Ihrer Eingabe passiert (auch die Konsole im Blick behalten). Woran liegt das?

b) Starten Sie java31_agent_MIT_Fehlerbehandlung.

c) Betrachten Sie in der Klasse Auswertung (ist in beiden Programmen identisch) die Methoden auswertenOhneFehlerbehandlung() und auswertenMitFehlerbehandlung() und versuchen Sie zu verstehen, worin sich die beiden Methoden unterscheiden.





Java_31-fehlerbehandlung-2: Fehlerbehandlung für FileWriter nachrüsten

Gegeben sei folgendes Java-Programm:

Java-Code
  public class FileSchreiben {   private FileWriter datei; private String inhalt;   public FileSchreiben() { }   public void schreiben() { datei = new FileWriter("datei.txt"); inhalt = "Hier kommen die Zahlen!\n\n";   System.out.println("Generiere Text ..."); for (int i = 2; i <= 20; i++) { inhalt += i; inhalt += "\n"; } System.out.println("Schreibe jetzt Datei ..."); datei.write(inhalt, 0, inhalt.length()); datei.flush(); System.out.println("File erfolgreich erstellt!"); } }    

Fangen Sie mögliche Fehler ab, und zwar IOException (Eingabe-/Ausgabefehler) und sonstige Fehler (Exception).
In beiden Fällen soll eine individuelle Nachricht ausgegeben werden (IOException: "E/A-Fehler!", Exception: "Es ist ein Fehler aufgetreten!") UND die Systemfehlermeldung. Dazu wenden Sie die Methode getMessage() auf das Exception-Objekt an, also bspw.

Java-Code
  catch (Exception ichBinNurEinBeispiel) { System.out.println(ichBinNurEinBeispiel.getMessage()); }    

Probieren Sie aus, ob die Fehler erfolgreich abgefangen werden.
- Wenn das Programm einmal erfolgreich gelaufen ist, klicken Sie auf die erzeugte Datei mit der rechten Maustaste und haken "Schreibgeschützt" an. Beim nächsten Durchgang des Programmes sollte es zu einem I/O-Fehler kommen.
- Ersetzen Sie in datei.write den Offset-Parameter (im Listing oben: 0) durch 5. Dadurch sollten Sie eine StringIndexOutOfBoundsException erhalten. Versuchen Sie zu verstehen, warum der Fehler auftritt (API-doc, Filewriter -> write).






Java_31-fehlerbehandlung-3: Einfache Fehlerbehandlung mit try-catch programmieren

Erzeugen Sie eine GUI mit zwei Textfeldern, in die zwei int-Werte eingegeben werden, nämlich "Anzahl Personen" und "Anzahl Äpfel". Auf Knopfdruck ("Wie viele Äpfel bekommt jede Person?") werden diese Zahlen dividiert und das Ergebnis auf einem Label ausgegeben.

STUFE 1: Realisieren Sie dieses Programm ohne Rücksicht auf Verluste. Die Möglichkeit einer Fehleingabe ignorieren Sie einfach. Sie stellen nicht die Frage, ob das Ergebnis korrekt ist (z.B. wenn Sie 10 Äpfel an 3 Personen verteilen und das Ergebnis 3 ist).

STUFE 2: Das Rechnungsergebnis muss korrekt sein. Tipp: Wenn Sie zwei Integer dividieren, wird immer gerundet (auch wenn Sie das Ergebnis in eine Fließkommazahl umwandeln). Verfahren Sie also ungefähr so: double ergebnis = (double)intZahl1/intZahl2.

STUFE 3: Fangen Sie mit try-catch mögliche Fehler ab, die dadurch entstehen können, dass in eines der beiden Felder keine Zahlen, sondern bspw. Buchstaben eingegeben werden (NumberFormatException). Versuchen Sie zuerst, die Fehlermeldung in der Konsole auszugeben. Wenn das funktioniert, geben Sie die Fehlermeldung auf einem Label aus.
Tipp: Arbeiten Sie in der Fachklasse nur mit einer Methode, Konstruktor bleibt leer (das hat den Vorteil, dass Sie für alle Operationen einen Wert mit "return" zurückgeben können).