groovy-lecture/skript/exceptions.md

50 lines
2.3 KiB
Markdown
Raw Normal View History

2024-06-08 01:30:12 +02:00
# Exception-Handling:
Grundsätzlich ähnelt sich die Ausnahmebehandlung in Groovy der in Java sehr, weshalb dies ein eher kurzes Kapitel wird. Dennoch wollen wir hier auf einige Grundlagen und Besonderheiten eingehen.
#### Vererbungshierarchie:
<img src="./../img/exceptions.png" width="350">
Es gilt die selbe Vererbungshierarchie, wie in Java. Alle Exception Klassen sind von der Klasse `Exception`, und somit auch indirekt von `Throwable` abgeleitet. Will man eigene Exceptions schreiben, müssen diese also von `Exception` erben.
#### Ausnahmen fangen:
Zum Fangen von Ausnahmen werden auch in Groovy try-catch-finally Blöcke benutzt.
- `try:` Dieser Block enthält den gefährlichen Code, der potentiell Ausnahmen werfen könnte.
- `catch:` Hier findet die eigentliche Fehlerbehandlung statt. Die Exceptions sollen hier nicht einfach ausgegeben bzw. ignoriert werden, sondern sinnvoll behandelt werden
- `finally:` Dieser Block ist gedacht für Aufräumarbeiten und wird immer ausgeführt, egal ob das Programm abrubt beendet wird durch Eintritt in den **catch**-Block, oder normal beendet wird.
Es können auch mehrere catch-Blocke nach einem try-Block folgen. Der Compiler wählt hier den ersten passenden Block aus. Deshalb gilt: **Man soll beim Schreiben der catch-Blöcke immer vom Spezifischen zum Allgemeinen gehen.**
````Groovy
try {
// Code der die Exception werfen kann
} catch (IOException e) {
// Fehlerbehandlung
} catch (Exception e) {
// Fehlerbehandlung
}
````
#### Dynamische Ausnahmebehandlung:
Anders als in Java muss in Groovy der Typ der Exception nicht angegeben werden. Da Groovy eine dynamisch typisierte Sprache ist, kann hier auch einfach nur der Variablenname angegeben werden. Der Compiler wählt dann die passende Exception zur Laufzeit aus.
````Groovy
try {
def result = 1 / 0
} catch (e) {
e.printStackTrace()
// Ausgabe: Caught an exception: Divison by zero
}
````
#### GString-Interpolation bei Exceptions:
Groovy erlaubt es die Exception Message dierekt durch die GString Interpolation auszugeben. Dadurch kann man Individuellere Konsolenausgaben bei Fehlerbehandlungen erreichen.
````Groovy
try {
def file = new File("gibtesnicht.txt")
file.text
} catch (e) {
println "Datei wurde nicht gefunden: ${e.message}"
}
// Ausgabe: Datei wurde nicht gefunden: gibtesnicht.txt (No such file or directory)
````