Scala系列20:Scala中异常捕获与抛出异常

2020-09-28 19:57发布

目录

0.异常处理

1.捕获异常

2.抛出异常


0.异常处理

来看看下面一段代码

  1. def main(args: Array[String]): Unit = {

  2. val i = 10 / 0


  3. println("你好!")

  4. }


  5. Exception in thread "main" java.lang.ArithmeticException: / by zero

  6. at ForDemo$.main(ForDemo.scala:3)

  7. at ForDemo.main(ForDemo.scala)

执行程序,可以看到scala抛出了异常,而且没有打印出来"你好"。说明程序出现错误后就终止了。

那怎么解决该问题呢?

在scala中,可以使用异常处理来解决这个问题 

1.捕获异常

语法格式

  1. try {

  2. // 代码

  3. }

  4. catch {

  5. case ex:异常类型1 => // 代码

  6. case ex:异常类型2 => // 代码

  7. }

  8. finally {

  9. // 代码

  10. }

尖叫提示:

  • Scala中捕捉异常的catch子句,语法与其他语言中不太一样。在Scala里,借用了模式匹配的思想来做异常的匹配,因此,在catch的代码里,是一系列case字句

  • try中的代码是我们编写的业务处理代码

  • 在catch中表示当出现某个异常时,需要执行的代码

  • 在finally中,是不管是否出现异常都会执行的代码

示例说明

  • 使用try..catch来捕获除零异常

参考代码

  1. package com.robot.scalademo


  2. object _08ObjectDemo {


  3. def main(args: Array[String]): Unit = {

  4. try {

  5. val i = 10 / 0


  6. println("你好!")

  7. } catch {

  8. //case ex: Exception => println(ex.getMessage) // / by zero

  9. case ex:Exception => ex.printStackTrace() //调用自带方法打印,case只执行一个。

  10. }

  11. finally {

  12. println("我一定会执行,不管异常上面发生了什么")

  13. }

  14. }

  15. }

  16. /***

  17. java.lang.ArithmeticException: / by zero

  18. at com.robot.scalademo._08ObjectDemo$.main(_08ObjectDemo.scala:7)

  19. at com.robot.scalademo._08ObjectDemo.main(_08ObjectDemo.scala)

  20. 我一定会执行,不管异常上面发生了什么

  21. */

2.抛出异常

我们也可以在一个方法中,抛出异常。语法格式和Java类似,使用throw new Exception...

示例说明

  • 在main方法中抛出一个异常

参考代码

  1. //scala主动抛出异常

  2. package com.robot.scalademo


  3. object _08ObjectDemo {


  4. def main(args: Array[String]): Unit = {

  5. throw new Exception("这是一个异常")

  6. }

  7. }

  8. /***

  9. Exception in thread "main" java.lang.Exception: 这是一个异常

  10. at com.robot.scalademo._08ObjectDemo$.main(_08ObjectDemo.scala:6)

  11. at com.robot.scalademo._08ObjectDemo.main(_08ObjectDemo.scala)

  12. */


  13. //2.Scala捕获主动抛出的异常

  14. package com.robot.scalademo


  15. object _08ObjectDemo {


  16. def main(args: Array[String]): Unit ={

  17. try {

  18. throw new Exception("这是一个异常")

  19. }catch {

  20. case ex:Exception => print("哈哈,被我捕获了")

  21. }

  22. }

  23. }

  24. /***

  25. 哈哈,被我捕获了

  26. */

尖叫提示:注意在scala不需要在方法上声明要抛出的异常,它已经解决了再Java中被认为是设计失败的检查型异常。

作者:涤生手记

链接:https://blog.csdn.net/qq_26442553/article/details/108467307

来源:CSDN
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。