Scala的異常處理和Java的類似。Scala的方法可以通過拋出異常的方式來終止相關(guān)代碼的運(yùn)行,不必通過返回值。
1.拋出異常throw
Scala使用關(guān)鍵字throw來拋出一個(gè)異常對(duì)象,如拋出一個(gè)參數(shù)異常:
throw new IllegalArgumentException
2.捕獲異常catch
Scala使用關(guān)鍵字catch捕獲異常冯事,如果有異常發(fā)生,catch子句按照次序捕獲異常血公。因此在catch子句中昵仅,越具體的異常越靠前,越普遍的異常越靠后。如果拋出的異常不在catch子句中摔笤,則該異常無法處理够滑,這時(shí)會(huì)把異常拋到上層調(diào)用者處理。
在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");
}
}
}
}
編譯并執(zhí)行以上代碼命辖,輸出結(jié)果如下:
E:\Test>scalac Test1.scala
E:\Test>scala Test1
Missing file exception
3.finally語句
不管有沒有異常發(fā)生都要執(zhí)行的語句况毅,放在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 ...");
}
}
}
編譯并執(zhí)行以上代碼,輸出結(jié)果如下:
E:\Test>scalac Test2.scala
E:\Test>scala Test2
Missing file exception
Exiting finally ...