Scala的異常處理類(lèi)似許多其他語(yǔ)言(如Java)。它不是以正常方式返回值,方法可以通過(guò)拋出異常來(lái)終止。 但是,Scala實(shí)際上并沒(méi)有檢查異常。
當(dāng)您想要處理異常時(shí),要像Java一樣使用try {...} catch {...}塊,除了catch塊使用匹配來(lái)識(shí)別和處理異常。
拋出異??雌饋?lái)與Java中的異常一樣。創(chuàng)建一個(gè)異常對(duì)象,然后使用throw關(guān)鍵字將其拋出如下。
throw new IllegalArgumentException
Scala允許在單個(gè)塊中try/catch任何異常,然后使用case塊對(duì)其進(jìn)行模式匹配。嘗試以下示例程序來(lái)處理異常。
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中,使用以下命令編譯和執(zhí)行此程序。
D:\>scalac Demo.scala
D:\>scala Demo
Missing file exception
try-catch表達(dá)式的行為與其他具有異常的語(yǔ)言相同。它在主體中執(zhí)行,如果它拋出一個(gè)異常,則會(huì)依次嘗試每個(gè)catch子句。
如果希望引發(fā)一些代碼執(zhí)行,無(wú)論表達(dá)式如何終止,都會(huì)執(zhí)行在finally子句包裝表達(dá)式。嘗試以下程序。
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中,使用以下命令編譯和執(zhí)行此程序。
D:\>scalac Demo.scala
D:\>scala Demo
Missing file exception
Exiting finally...