返回顶部

OutOfMemory.CN技术专栏-> Scala-> Scala入门教程:scala异常处理

Scala入门教程:scala异常处理

更多

scala的异常处理机制和java类似。

异常处理是一个很大的话题,这里我们主要介绍scala处理异常的特别之处。

我们先看下scala是如何抛出异常的:

throw new IllegalArgumentException("arg 1 was wrong...");

上面的语法和java中的抛出异常语法完全一致。

当异常被抛出之后,程序语句的正常执行就被中断了,异常被沿着程序执行的堆栈一层层传到了上一级,直到异常被捕获。

我们看下scala如何捕获异常:

try{
    throwsException();
    println("this line is never executed");
} catch {
  case e: Exception => println("exception caught: " + e);
}
//A METHOD THAT THROWS EXCEPTION
def throwsException() {
    throw new IllegalStateException("Exception thrown");
}

scala的try..catch语句和java的有些不一样了,catch语句中通过case语句来捕获对应的异常,注意case语句的语法。

在上面的例子中只有一个case语句,而实际上scala支持多个case语句,和java中类似异常类型越泛应该写在越靠后的位置。

catch {
  case e: IllegalArgumentException => println("illegal arg. exception");
  case e: IllegalStateException    => println("illegal state exception");
  case e: IOException              => println("IO exception");
}

scala的finally语句

finally和java中的finally语句是一样的,无论是否会抛出异常都会执行finally语句块内的内容,如下是一个finally语句块:

try {
    throwsException();
} finally {
    println("this code is always executed");
}

finally语句也可以放在try..catch的后面,如果异常发生时,可以执行catch语句之后再执行finally语句块内的内容。

try {
  throwsException();
} catch {
  case e: IllegalArgumentException => println("illegal arg. exception");
  case e: IllegalStateException    => println("illegal state exception");
  case e: IOException              => println("IO exception");
} finally {
  println("this code is always executed");
}
推荐阅读:
支持

1

反对

0

发表评论