English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala 异常処理

Scalaの例外処理は、Javaなどの他の言語と似ています。

Scalaのメソッドは、例外を投げる方法で関連するコードの実行を終了させることができます。返り値を通じて終了させる必要はありません。

例外を投げる

Scalaでは、Javaと同様にthrowメソッドを使用して例外を投げることができます。例えば、新しいパラメータ例外を投げる例:

throw new IllegalArgumentException

例外を捕獲する

例外の捕獲メカニズムは他の言語と同様です。例外が発生した場合、catch文は順序に捕獲されます。したがって、catch文では、より具体的な例外は前に、より一般的な例外は後に配置する必要があります。もし、catch文に記載されていない例外が発生した場合、その例外は処理されず、呼び出し元に昇格されます。

例外を捕獲する catch 子句は、他の言語とは異なる構文です。Scalaでは、例外のマッチングにはパターンマッチングの考え方が採用されており、したがって、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")
      }
         case ex: FileNotFoundException =>{
            println("Missing file exception")
         }
         case ex: IOException => {
            println("IO Exception")
         }
      }
   }
}

以下のコードを実行すると、出力結果が:

$ scalac Test.scala 
$ scala Test
Missing file exception

catch 文の内容は match 内の case と完全に同じです。例外キャッチは順序に従って行われるため、最も一般的な例外、Throwable が最前面に書かれていると、その後の case はキャッチされません。したがって、最後に書く必要があります。

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")
      }
         case ex: FileNotFoundException => {
            println("Missing file exception")
         }
         case ex: IOException => {
            println("IO Exception")
         }
      } finally {
         println("Exiting finally...")
      }
   }
}

以下のコードを実行すると、出力結果が:

$ scalac Test.scala 
$ scala Test
Missing file exception
Exiting finally...