# 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](https://mermaid.ink/img/eyJjb2RlIjoiY2xhc3NEaWFncmFtXG4gICAgVGhyb3dhYmxlIDx8LS0gRXhjZXB0aW9uXG4gICAgVGhyb3dhYmxlIDx8LS0gRXJyb3JcbiAgICBFeGNlcHRpb24gPHwtLSBSdW50aW1lRXhjZXB0aW9uIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifSwidXBkYXRlRWRpdG9yIjpmYWxzZX0)](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoiY2xhc3NEaWFncmFtXG4gICAgVGhyb3dhYmxlIDx8LS0gRXhjZXB0aW9uXG4gICAgVGhyb3dhYmxlIDx8LS0gRXJyb3JcbiAgICBFeGNlcHRpb24gPHwtLSBSdW50aW1lRXhjZXB0aW9uIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifSwidXBkYXRlRWRpdG9yIjpmYWxzZX0) --- # Ungeprüfte Exceptions Erben von `RuntimeException` und müssen nicht explizit behandelt werden. ```java Dreieck dreieck = null; double flaeche = dreieck.gibFlaeche(); // Programm wird beendet mit NullPointerException ``` --- # Geprüfte Exceptions Erben von `Exception` und müssen explizit behandelt werden. ```java 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. ```java 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