English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Das Ausnahmebehandlung in Scala ist ähnlich wie in anderen Sprachen wie Java.
Methoden in Scala können durch das Auslösen von Ausnahmen das Ausführen von Code beenden, ohne dass ein Rückgabewert erforderlich ist.
Scala verwendet wie Java Methoden, um Ausnahmen auszulösen, z.B. eine neue Parameterausnahme auslösen:
throw new IllegalArgumentException
Das Mechanismus der Ausnahmeerkennung ist ähnlich wie in anderen Sprachen. Wenn eine Ausnahme auftritt, wird der catch-Teil in der Reihenfolge erkannt. Daher sollte der spezifischere Ausnahmeinhalt weiter vorne und der allgemeine Ausnahmeinhalt weiter hinten im catch-Teil stehen. Wenn die ausgelöste Ausnahme nicht im catch-Teil aufgeführt ist, kann die Ausnahme nicht behandelt werden und wird an den Aufrufer weitergeleitet.
Der catch-Teil, der Ausnahmen fängt, hat eine andere Syntax als in anderen Sprachen. In Scala wird das Musterabgleichskonzept verwendet, um Ausnahmen abzugleichen, daher ist der catch-Code eine Reihe von case-Sätzen, wie im folgenden Beispiel gezeigt:
import java.io.FileReader import java.io.FileNotFoundException import java.io.IOException object Test { def main(args: Array[String]) { try { val f = new FileReader("input.txt") } case ex: FileNotFoundException => { println("Missing file exception") } case ex: IOException => { println("IO Exception") } } } }
Execute the following code, the output will be:
$ scalac Test.scala $ scala Test Missing file exception
The content in the catch clause is exactly the same as the case in the match. Since exception handling is ordered, if the most general exception, Throwable, is written first, then the cases after it will not be caught. Therefore, it needs to be written at the end.
The finally statement is used to execute steps that need to be executed whether the normal processing or an exception occurs, as shown below:
import java.io.FileReader import java.io.FileNotFoundException import java.io.IOException object Test { def main(args: Array[String]) { try { val f = new FileReader("input.txt") } case ex: FileNotFoundException => { println("Missing file exception") } case ex: IOException => { println("IO Exception") } } finally { println("Exiting finally...") } } }
Execute the following code, the output will be:
$ scalac Test.scala $ scala Test Missing file exception Exiting finally...