Programmieren_2/exceptions.md

88 lines
2.8 KiB
Markdown

<!--
title: Assertions
description: Folien für Assertions in Programmieren 2
url: https://git.henriburau.de/tutorien/programmieren-2
header: Programmieren 2 **Tutorium**
footer: Henri Burau
-->
# 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