无涯教程-Scala - 异常处理

43 阅读1分钟

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

     </span><span class="kwd">case</span><span class="pln"> ex</span><span class="pun">:</span><span class="pln"> </span><span class="typ">IOException</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        println</span><span class="pun">(</span><span class="str">"IO Exception"</span><span class="pun">)</span><span class="pln">
     </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

} }

将上述程序保存在 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") }

     </span><span class="kwd">case</span><span class="pln"> ex</span><span class="pun">:</span><span class="pln"> </span><span class="typ">IOException</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        println</span><span class="pun">(</span><span class="str">"IO Exception"</span><span class="pun">)</span><span class="pln">
     </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">finally</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
     println</span><span class="pun">(</span><span class="str">"Exiting finally..."</span><span class="pun">)</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

} }

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo
Missing file exception
Exiting finally...

参考链接

www.learnfk.com/scala/scala…