Scala - 异常处理
Scala 的异常与许多其他语言(如 Java)中的异常一样工作。 方法可以通过抛出异常来终止,而不是以正常方式返回值。 然而,Scala 实际上并没有检查异常。
当您想要处理异常时,您可以像在 Java 中一样使用 try{...}catch{...} 块,只是 catch 块使用匹配来识别和处理异常。
抛出异常
抛出异常看起来与在 Java 中相同。 您创建一个异常对象,然后使用 throw 关键字将其抛出,如下所示。
throw new IllegalArgumentException
捕捉异常
Scala 允许您try/catch 单个块中的任何异常,然后使用 case 块对其执行模式匹配。 尝试以下示例程序来处理异常。
示例
import java.io.FileReader import java.io.FileNotFoundException import java.io.IOException object Demo { def main(args: Array[String]) { try { val f = new FileReader("input.txt") } catch { case ex: FileNotFoundException =>{ println("Missing file exception") } case ex: IOException => { println("IO Exception") } } } }
将上述程序保存在 Demo.scala 中。 以下命令用于编译和执行该程序。
命令
\>scalac Demo.scala \>scala Demo
输出
Missing file exception
这个 try-catch 表达式的行为与在其他语言中的行为相同,但有例外。 执行主体,如果抛出异常,则依次尝试每个 catch 子句。
finally 子句
如果你想让一些代码不管表达式如何终止都执行,你可以用 finally 子句包装一个表达式。 试试下面的程序。
示例
import java.io.FileReader import java.io.FileNotFoundException import java.io.IOException object Demo { def main(args: Array[String]) { try { val f = new FileReader("input.txt") } catch { case ex: FileNotFoundException => { println("Missing file exception") } case ex: IOException => { println("IO Exception") } } finally { println("Exiting finally...") } } }
将上述程序保存在 Demo.scala 中。 以下命令用于编译和执行该程序。
命令
\>scalac Demo.scala \>scala Demo
输出
Missing file exception Exiting finally...