Scala 之异常处理

  1. Scala 异常简介:
    Scala提供try和catch块来处理异常。
    try块用于包含可能出错的代码。
    catch块用于处理try块中发生的异常。
    可以根据需要在程序中有任意数量的 try…catch 块。
    语法处理上和 Java 类似,但是又不完全相同

  2. Java 异常处理回顾

    1. java语言按照try—catch-catch…—finally的方式来处理异常
    2. 不管有没有异常捕获,都会执行 finally, 因此通常可以在 finally 代码块中释放资源
    3. 可以有多个 catch,分别捕获对应的异常,这时需要把范围小的异常类写在前面,把范围大的异常类写在后面,否则编译错误。会提示 “Exception ‘java.lang.xxxxxx’ has already been caught”
package com.haoxuanli.csdn

object JavaExceptionDemo01 {
  def main(args: Array[String]): Unit = {
    try { // 可疑代码
      val i = 0
      val b = 10
      val c = b / i // 执行代码时,会抛出 ArithmeticException 异常
    } catch {
      case ex: ArithmeticException =>
        ex.printStackTrace()
      case e: Exception =>

      //java 中不可以把返回大的异常写在前,否则报错!! e.printStackTrace();
    } finally {

    }
    System.out.println("ok~~~继续执行...")
  }
}
  1. Scala 异常代码示例:
package com.atguigu.chapter05.myexception

object ScalaExceptionDemo {
  def main(args: Array[String]): Unit = {
    try {
      val r = 10 / 0
    } catch { //说明
      //1. 在 scala 中只有一个 catch
      //2. 在 catch 中有多个 case, 每个 case 可以匹配一种异常 case ex: ArithmeticException //3. => 关键符号,表示后面是对该异常的处理代码块
      //4. finally 最终要执行的
      case ex: ArithmeticException => {
        println("捕获了除数为零的算数异常")
      }
      case ex: Exception => println("捕获了异常")
    } finally {
      // 最终要执行的代码
      println("scala finally...")
    }
    println("ok,继续执行~~~~~")
  }
}
  1. Scala 异常处理总结

    1. 我们将可疑代码封装在 try 块中。 在 try 块之后使用了一个 catch 处理程序来捕获异常。如果发生任何异常,catch 处理程序将处理它,程序将不会异常终止。
    1. Scala的异常的工作机制和Java一样,但是Scala没有“checked(编译期)”异常,即Scala没有编译异常这个概念,异常都是在运行的时候捕获处理。
    2. 用 throw 关键字,抛出一个异常对象。所有异常都是 Throwable 的子类型。throw 表达式是有类 型的,就是 Nothing,因为 Nothing 是所有类型的子类型,所以 throw 表达式可以用在需要类型的地方
    3. 在 Scala 里,借用了模式匹配的思想来做异常的匹配,因此,在 catch 的代码里,是一系列 case 子句来匹配异常, 当匹配上后 => 有多条 语句可以换行写,类似 java 的 switch case x: 代码块…
    4. 异常捕捉的机制与其他语言中一样,如果有异常发生,catch 子句是按次序捕捉的。因此,在case子句中,越具体的异常越要靠前,越普遍的异常越靠后,如果把越普遍的异常写在前,把具体的异常写在后,在 scala 中也不会报错,但这样是非常不好的编程风格。
    5. finally子句用于执行不管是正常处理还是有异常发生时都需要执行的步骤,一般用于对象的清理工作,这点和 Java 一样。
    6. Scala提供了throws关键字来声明异常。可以使用方法定义声明异常。它向调用者函数提供了此方法可能引发此异常的信息。 它有助于调用函数处理并将该代码包含在 try-catch 块中,以避免程序 异常终止。在 scala 中,可以使用 throws 注释来声明异常

Scala声明异常示例:

def main(args: Array[String]): Unit = {
  f11()
}
@throws(classOf[NumberFormatException]) //等同于 NumberFormatException.class
def f11() = {
  "abc".toInt
}

你可能感兴趣的:(Scala)