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">=></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">=></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...