位置:首页 > > 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:/>