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...
广告