Try and Catch

Datentypen und Exceptions in Java

Jim White

Java Developer

Probleme in Java

  • In Anwendungen können Probleme auftreten
    • Durch falsche Eingaben
    • Durch Programmierfehler
    • Durch unvorhergesehene Umstände
  • Probleme heißen Exceptions
    • Unterbrechen den normalen Kontrollfluss
  • Java wirft Exceptions
Datentypen und Exceptions in Java

Exception-Beispiel

public static void main(String[] args) {
    ArrayList<String> allStars = new ArrayList<String>();
    allStars.add("Mays");
    allStars.add("Aaron");
    allStars.add("Ruth");
    String last = allStars.get(3); // This will cause an exception
    System.out.println(last);
}
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 3 out of 
bounds for length 3
Datentypen und Exceptions in Java

Try

  • Umgib exception-erzeugenden Code mit einem try-Block
    • „Probiere diesen Code; tritt ein Problem auf, gib es an den catch-Block weiter"
try {
    // Auszuführende Anweisungen, auf Exceptions überwacht
}
Datentypen und Exceptions in Java

Catch

  • Setze einen catch-Block direkt nach try
    • Dient als Handler für Exceptions
    • Die gefangene Exception wird als Parameter übergeben
  • try/catch-Blöcke sind für einige Exception-Typen Pflicht
    • Für andere optional
try {
    // Auszuführende Anweisungen, auf Exceptions überwacht
} catch (<Exception type> <variable name>) {
    // Anweisungen, falls eine Exception aufgetreten ist
}
Datentypen und Exceptions in Java

IndexOutOfBoundsException abfangen

try {
  ArrayList<String> allStars = new ArrayList<String>();
  allStars.add("Mays");
  allStars.add("Aaron");
  allStars.add("Ruth");
  String last = allStars.get(3); // Accessing an element that isn't there
  System.out.println(last);
} catch (IndexOutOfBoundsException e) {
  System.out.println("Ups – falscher Index");
}
Ups – falscher Index
Datentypen und Exceptions in Java

Mehrere Catch-Blöcke

  • Verwende mehrere catch-Blöcke für verschiedene Exception-Typen
  • Jeder catch hat eigenen Exception-Typ und -Variable
  • Bei einer Exception prüft Java die catch-Blöcke der Reihe nach, bis einer passt
try {
    ArrayList<String> nums 
      = new ArrayList<String>();
    nums.add("one");
    String last = nums.get(0);
    Integer.valueOf(last);
    System.out.println(last);
} catch (IndexOutOfBoundsException eIndex) {
    System.out.println("Ups – falscher Index");
} catch (NumberFormatException eValueOf) {
    System.out.println(
      "Ups – String ist keine Zahl");
}
Ups – String ist keine Zahl
Datentypen und Exceptions in Java

Catch-„All"

  • Verwende catch (Exception variable){ } als Catch-all
    • Behandelt alle Exceptions, die vorherige Blöcke nicht fangen
try {
    // Code zum Ausprobieren
} catch (IndexOutOfBoundsException eIndex) {
    System.out.println("Ups – falscher Index");
} catch (NumberFormatException eValueOf) {
    System.out.println("Ups – String ist keine Zahl");
} catch (Exception e) { // Fängt alle außer den zwei oben
    System.out.println("Etwas Unerwartetes ist passiert");
}
Datentypen und Exceptions in Java

Finally

  • Code im finally-Block läuft immer
// Wenn eine Exception auftritt
try {
    Integer.valueOf("one");
} catch (NumberFormatException eValueOf) {
    System.out.println("Ups");
} finally {
    System.out.println("Aufräumen");
}
Ups
Aufräumen

 

// Wenn keine Exception geworfen wird
try {
    Integer.valueOf("1");
} catch (NumberFormatException eValueOf) {
    System.out.println("Ups");
} finally {
    System.out.println("Aufräumen");
}
Aufräumen
Datentypen und Exceptions in Java

Exception-Objekt

  • Das in den catch-Block übergebene Exception-Objekt enthält viele Infos
  • Nutze Methoden darauf, um die Ursache zu verstehen
    • .getMessage() liefert die lesbare Ursache
    • .getClass() gibt Klassen-/Typnamen der Exception
    • .printStackTrace() zeigt den Stack-Trace (nächste Folie)
public class ExceptionExample {

    public static void main(String[] args) {
        try {
            Integer.valueOf("one");
        } catch (NumberFormatException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}
Datentypen und Exceptions in Java

Exception-Stack-Trace

  • Der Stack-Trace zeigt den Ausführungspfad bis zum Problem
    • Unten: Ausgabe des vorherigen Codebeispiels – inkl. ausgegebenem Stack-Trace
For input string: "one"
java.lang.NumberFormatException: For input string: "one"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
    at java.base/java.lang.Integer.parseInt(Integer.java:661)
    at java.base/java.lang.Integer.valueOf(Integer.java:988)
    at foo/exceptions.ExceptionExample.main(ExceptionExample.java:7)
Datentypen und Exceptions in Java

Lass uns üben!

Datentypen und Exceptions in Java

Preparing Video For Download...