Scala的异常处理和Java的类似。Scala的方法可以通过抛出异常的方式来终止相关代码的运行,不必通过返回值。
1.抛出异常throw
Scala使用关键字throw来抛出一个异常对象,如抛出一个参数异常:
throw new IllegalArgumentException
2.捕获异常catch
Scala使用关键字catch捕获异常,如果有异常发生,catch子句按照次序捕获异常。因此在catch子句中,越具体的异常越靠前,越普遍的异常越靠后。如果抛出的异常不在catch子句中,则该异常无法处理,这时会把异常抛到上层调用者处理。
在Scala里,借用了模式匹配的思想来做异常的匹配,因此在catch子句中,是一系列case子句:
import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException
object Test1 {
def main(args:Array[String]){
try{
val fin = new FileReader("input.txt");
}catch{
case ex: FileNotFoundException => {
println("Missing file exception");
}
case ex: IOException => {
println("IO Exception");
}
}
}
}
编译并执行以上代码,输出结果如下:
E:\Test>scalac Test1.scala
E:\Test>scala Test1
Missing file exception
3.finally语句
不管有没有异常发生都要执行的语句,放在finally语句中:
import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException
object Test2 {
def main(args:Array[String]){
try{
val fin = new FileReader("input.txt");
}catch{
case ex: FileNotFoundException => {
println("Missing file exception");
}
case ex: IOException => {
println("IO Exception");
}
}finally{
println("Exiting finally ...");
}
}
}
编译并执行以上代码,输出结果如下:
E:\Test>scalac Test2.scala
E:\Test>scala Test2
Missing file exception
Exiting finally ...