English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Strumenti online
Il metodo di gestione delle eccezioni in Scala è simile ad altri linguaggi come Java.
Il metodo per lanciare un'eccezione in Scala è lo stesso di Java, utilizzando il metodo throw, ad esempio, lanciare una nuova eccezione di parametro:
throw new IllegalArgumentException
Il meccanismo di cattura delle eccezioni è lo stesso degli altri linguaggi. Se si verifica un'eccezione, la clausola catch la cattura in ordine. Pertanto, nella clausola catch, è necessario posizionare le eccezioni più specifiche in primo piano e quelle più comuni in secondo piano. Se l'eccezione lanciata non è presente nella clausola catch, l'eccezione non può essere gestita e verrà elevata al chiamante.
La clausola catch per catturare eccezioni è diversa dagli altri linguaggi. In Scala, si utilizza l'idea di match pattern per fare la match delle eccezioni, quindi, nel codice della clausola catch, c'è una serie di frasi case, come nell'esempio seguente:
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")
执行以上代码,输出结果为:
$ scalac Test.scala $ scala Test Missing file exception
catch 子句中的内容与 match 中的 case 完全相同。由于异常捕获是按顺序进行的,如果最普遍的异常,Throwable,写在最前面,则在它后面的 case 都无法捕获,因此需要将它写在最后面。
finally 语句用于执行不管是正常处理还是有异常发生时都需要执行的步骤,示例如下:
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...")
执行以上代码,输出结果为:
$ scalac Test.scala $ scala Test Missing file exception Exiting finally...