Scala異常處理
Scala的異常的工作像許多其他語言,如Java異常。而不是正常方式返回的值,方法可以通過拋出一個異常終止。然而,Scala實際上並冇有檢查異常。
當要處理異常,那麼可使用try{...}catch{...} 塊,就像在Java中除了catch塊采用匹配識彆和處理異常。
拋出異常:
拋出一個異常看起來類似於Java。創建一個異常對象,然後使用throw關鍵字把它拋出:
throw new IllegalArgumentException
捕獲異常:
Scala中try/catch在一個單獨的塊捕捉任何異常,然後使用case塊進行模式匹配,如下圖所示:
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") } catch { case ex: FileNotFoundException =>{ println("Missing file exception") } case ex: IOException => { println("IO Exception") } } } }
當上述代碼被編譯和執行時,它產生了以下結果:
C:/>scalac Test.scala C:/>scala Test Missing file exception C:/>
這種try-catch表達的行為在其他語言處理異常是一樣的。body是執行體,如果它拋出一個異常,每個catch子句都依次嘗試捕獲。
finally子句:
如果想知道引起一些代碼是如何表達的終止執行,可以用一個finally子句包住一個表達式,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") } catch { case ex: FileNotFoundException => { println("Missing file exception") } case ex: IOException => { println("IO Exception") } } finally { println("Exiting finally...") } } }
當上述代碼被編譯和執行時,它產生了以下結果:
C:/>scalac Test.scala C:/>scala Test Missing file exception Exiting finally... C:/>