第 7 章 异常

作为一门比较优秀的语言, 异常处理肯定是少不了的.

Scala 的异常处理机制比 Java 改进了一些, 至少没有 Java 的异常处理机制那么令人讨厌. 比如去掉了令人生厌的受检异常

object Test {
  def main(args: Array[String]): Unit = {
    try {
      var n = 10 / 0
    } catch {
      case ex: ArithmeticException => println("发生算术异常")
      case ex: Exception => println("发生了异常1")
    } finally {
      println("finally")
    }
    println("异常处理结束")
  }
}
  1. 我们将可疑代码封装在 try 块中。在try块之后使用了一个catch处理程序来捕获异常。如果发生任何异常,catch处理程序将处理它,程序将不会异常终止

  2. Scala 的异常的工作机制和 Java 一样,但是 Scala 没有“checked(编译期)”异常,即 Scala 没有编译异常这个概念,异常都是在运行的时候捕获处理

  3. 用 throw 关键字, 抛出一个异常对象. 所有异常都是 Throwable 的子类型. throw 表达式是有类型的, 就是 Nothing, 因为 Nothing 是所有类型的子类型, 所以throw 表达式可以用在需要类型的地方

    def test(): Nothing = {
     throw new Exception("不对")
    }
    
  4. 在Scala里,借用了模式匹配的思想来做异常的匹配,因此,在catch的代码里,是一系列case子句来匹配异常。【前面案例可以看出这个特点, 模式匹配我们后面详解】

  5. 异常捕捉的机制与其他语言中一样,如果有异常发生,catch 子句是按次序捕捉的。因此,在 catch 子句中,越具体的异常越要靠前,越普遍的异常越靠后,如果把越普遍的异常写在前,把具体的异常写在后,在 scala 中也不会报错,但这样是非常不好的编程风格

  6. finally 子句用于执行不管是正常处理还是有异常发生时都需要执行的步骤,一般用于对象的清理工作,这点和 Java 一样

  7. Scala 提供了 throws 关键字来声明异常,可以使用 throws 注解来声明异常

    object Test {
     def main(args: Array[String]): Unit = {
       f11()
     }
    
     @throws(classOf[NumberFormatException])
     def f11() = {
       "abc".toInt
     }
    }
    
Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-05-19 09:47:48

results matching ""

    No results matching ""