位置:首頁 > 高級語言 > Scala教學 > Scala異常處理

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:/>