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:/>