Programmieren_2/exceptions.md

2.8 KiB

Exceptions

Erlauben es mit Fehlersituationen in einem Programm umzugehen. Es gibt zwei mögliche Fehlerarten:

  1. Entwicklungsfehler Vermeidbare Fehler die während der Entwicklung auftreten. Können gut durch Tests aufgedeckt werden und brauchen keine explizite Fehlerbehandlung. Beispiel: Ungültiger Arrayindex, Teilen durch 0

  2. Umgebungsfehler Unvermeidbare Fehler die durch die Programmumgebung ausgelöst werden. Diese Fehlerart benötigt eine Fehlerbehandlung. Beispiel: Keine Internetverbindung, Zu wenig Festplattenspeicher


Hierarchie

Exceptions sind Objekte die von Exception oder RuntimeException erben.

width:300px


Ungeprüfte Exceptions

Erben von RuntimeException und müssen nicht explizit behandelt werden.

Dreieck dreieck = null;
double flaeche = dreieck.gibFlaeche();
// Programm wird beendet mit NullPointerException

Geprüfte Exceptions

Erben von Exception und müssen explizit behandelt werden.

public static void main(String[] args) {
    System.out.print("Bitte Alter eingeben: ");
    try {
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        int alter = Integer.parseInt(name); // Wirft ggf. NumberFormatException
    } 
    catch(NumberFormatException e) {
        System.out.println("Das war kein gültiges Alter!");
    } 
    finally {
        sc.close()
    }
}

Exceptions werfen

Exceptions werden mit dem Schlüsselwort throw geworfen. Wird in einer Methode eine geprüfte Exception nicht behandelt, muss dies in dem Methodenkopf mithilfe von throws deklariert werden.

public void pingServer(String serverUrl) throws ConnectException 
{
    Server server = connectToServer(serverUrl);
    if(server == null)
    {
        throw new ConnectException("Can't connect to server");
    }
}


Übung

  1. Wann werden geprüfte Exceptions eingesetzt und wann ungeprüfte?

    • Geprüfte Exceptions bei Umgebungsfehlern, Ungeprüfte Exceptions bei Entwicklungsfehlern
  2. Wie kann eine geprüfte Exception beim Auftreten an den Klienten weitergeleitet werden?

    • In den Methodenkopf throws reinschreiben