Scala - 異常處理



Scala 的異常處理機制與 Java 等許多其他語言類似。方法可以透過丟擲異常來終止,而不是以常規方式返回值。但是,Scala 實際上並沒有檢查異常。

當您想要處理異常時,您可以像在 Java 中一樣使用 try{...}catch{...} 塊,只是 catch 塊使用模式匹配來識別和處理異常。

丟擲異常

丟擲異常的方式與 Java 中相同。您建立一個異常物件,然後使用 **throw** 關鍵字丟擲它,如下所示。

throw new IllegalArgumentException

捕獲異常

Scala 允許您在一個塊中 **try/catch** 任何異常,然後使用 **case** 塊對其進行模式匹配。嘗試以下示例程式來處理異常。

示例

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**。使用以下命令編譯和執行此程式。

命令

\>scalac Demo.scala
\>scala Demo

輸出

Missing file exception

此 **try-catch** 表示式的行為與其他具有異常處理機制的語言相同。執行主體,如果丟擲異常,則依次嘗試每個 **catch** 子句。

finally 子句

如果要強制執行某些程式碼,無論表示式如何終止,都可以使用 **finally** 子句包裝表示式。嘗試以下程式。

示例

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**。使用以下命令編譯和執行此程式。

命令

\>scalac Demo.scala
\>scala Demo

輸出

Missing file exception
Exiting finally...
廣告