LZ名約山炮

博客园 首页 新随笔 联系 订阅 管理

异常

  语法处理上和Java类似,但是又不尽相同。

9.1 Java异常处理

package com.yuange.scala;

public class TestException {
    public static void main(String[] args) {
        try {
            int a = 10;
            int b = 0;
            int c = a / b;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            System.out.println("finally");
        }
    }
}

    (1Java语言按照trycatchfinally的方式来处理异常

    (2)不管有没有异常捕获,都会执行finally,因此通常可以在finally代码块中释放资源。

    (3)可以有多个catch,分别捕获对应的异常,这时需要把范围小的异常类写在前面,把范围大的异常类写在后面,否则编译错误。

9.2 Scala异常处理

package com.yuange.scala.day06

object TestException {
  def main(args: Array[String]): Unit = {
    try{
      var a = 10
      var b = 0
      var c = a / b
    }catch{
      case e: ArithmeticException => {
        println("算数异常:" + e)
      }
      case e2: Exception => {
        println("出现异常:" + e2)
      }
    }finally {
      println("finally")
    }
  }
}

  1)我们将可疑代码封装在try块中。在try块之后使用了一个catch处理程序来捕获异常。如果发生任何异常,catch处理程序将处理它,程序将不会异常终止。

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

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

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

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

def test():Nothing = {
    throw new Exception("不对")
}

  6Scala提供了throws关键字来声明异常。可以使用方法定义声明异常。它向调用者函数提供了此方法可能引发此异常的信息。它有助于调用函数处理并将该代码包含在try-catch块中,以避免程序异常终止。在Scala中,可以使用throws注释来声明异常

package com.yuange.scala.day06

object TestExceptionTwo {
  def main(args: Array[String]): Unit = {
    testException()
  }

  @throws(classOf[NumberFormatException])
  def testException() = {
    "hello".toInt
  }
}
posted on 2021-05-25 16:32  LZ名約山炮  阅读(51)  评论(0编辑  收藏  举报