Scala 异常处理

scala 异常处理

scala 的异常处理和其它语言比如 java 类似。

scala 的方法可以通过抛出异常的方法的方式来终止相关代码的运行,不必通过返回值。

 

1. 抛出异常

scala 抛出异常的方法和 java一样,使用 throw 方法,例如,抛出一个新的参数异常:

throw new illegalargumentexception

 

2. 捕获异常

异常捕捉的机制与其他语言中一样,如果有异常发生,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")
      } catch {
         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都捕捉不到,因此需要将它写在最后面。

 

3. 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...")
      }
   }
}

执行以上代码,输出结果为:

$ scalac test.scala 
$ scala test
missing file exception
exiting finally...

下一节:scala 提取器(extractor)

scala 教程

相关文章