异常

当碰到异常情况时,方法抛出一个异常,终止方法本身的执行,异常传递到其调用者,调用者可以处理该异常,也可以升级到他的调用者.运行系统会一直这样升级异常,直到有调用者能处理它.如果一直没有处理,则终止整个程序

scala的异常工作机制和java一样,但是scala没有”checked”异常,你不需要声明说函数或者方法可能会抛出某种异常.受检异常在编译器被检查,java必须声明方法所会抛出异常类型

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

捕捉异常:在scala里,借用了模式匹配的思想来做异常的匹配,因此,在catch的代码里,是一系列case字句

异常捕捉的机制与其他语言中一样,如果有异常发生,catch字句是按次序捕捉的.因此,在catch字句中,越具体的异常越要靠前,越普遍的异常越要靠后.
如果抛出的异常不在catch字句中,该异常则无法处理,会升级到调用者处

finally字句用于执行不管是正常处理还是有异常发生时都需要执行的步骤,一般用于对象的清理工作

  1. object ExceptionSyllabus {
  2. def divider(x: Int, y:Int): Float = {
  3. if (y == 0) throw new Exception("0作为除数")
  4. else x / y
  5. }
  6. def main(args: Array[String]): Unit = {
  7. try {
  8. println(divider(10, 3))
  9. } catch {
  10. case ex: Exception => println("捕获了异常: " + ex)
  11. } finally {
  12. }
  13. }
  14. }