课程表

Scala课程

工具箱
速查手册

Scala 异常处理

当前位置:免费教程 » Java相关 » Scala

Scala 的异常处理和其它语言比如 Java 类似。

Scala 的方法可以通过抛出异常的方法的方式来终止相关代码的运行,不必通过返回值。


抛出异常

Scala 抛出异常的方法和 Java一样,使用 throw 方法,例如,抛出一个新的参数异常:

  1. throw new IllegalArgumentException

捕获异常

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

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

  1. import java.io.FileReader
  2. import java.io.FileNotFoundException
  3. import java.io.IOException
  4.  
  5. object Test {
  6. def main(args: Array[String]) {
  7. try {
  8. val f = new FileReader("input.txt")
  9. } catch {
  10. case ex: FileNotFoundException =>{
  11. println("Missing file exception")
  12. }
  13. case ex: IOException => {
  14. println("IO Exception")
  15. }
  16. }
  17. }
  18. }

在线运行实例

执行以上代码,输出结果为:

  1. $ scalac Test.scala
  2. $ scala Test
  3. Missing file exception

catch字句里的内容跟match里的case是完全一样的。由于异常捕捉是按次序,如果最普遍的异常,Throwable,写在最前面,则在它后面的case都捕捉不到,因此需要将它写在最后面。


finally 语句

finally 语句用于执行不管是正常处理还是有异常发生时都需要执行的步骤,实例如下:

  1. import java.io.FileReader
  2. import java.io.FileNotFoundException
  3. import java.io.IOException
  4.  
  5. object Test {
  6. def main(args: Array[String]) {
  7. try {
  8. val f = new FileReader("input.txt")
  9. } catch {
  10. case ex: FileNotFoundException => {
  11. println("Missing file exception")
  12. }
  13. case ex: IOException => {
  14. println("IO Exception")
  15. }
  16. } finally {
  17. println("Exiting finally...")
  18. }
  19. }
  20. }

在线运行实例

执行以上代码,输出结果为:

  1. $ scalac Test.scala
  2. $ scala Test
  3. Missing file exception
  4. Exiting finally...
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号