88 lines
2.8 KiB
Markdown
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.
|
|
|
|
[](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
|