scala的异常处理
scala可以通过抛出异常终止程序的执行,方法的调用者要么捕获并处理这个异常,要么继续向上抛出。
抛出异常
抛出异常
当抛出异常时,当前的运算被终止,运行时系统查找可以接受IllegalArgumentException的
异常处理器。控制权将在离抛出点最近的处理器中恢复。如果没有找到符合要求的异常处理器,则程序退出。
Scala 没有“受检”异常--不需要声明函数或方法可能会抛出的某种异常。
创建一个异常后用 throw关键字抛出:
throw new
IllegalArgumentException
抛出的异常类型是 Nothing
def halt(n:Int): Unit ={ if(n%2==0) println(n + " 是偶数") else throw new RuntimeException(n+ " 是奇数") }
half(5)的运行结果:
Exception in thread "main" java.lang.RuntimeException: 5 是奇数
at study.Throw$.halt(Throw.scala:13)
at study.Throw$.main(Throw.scala:6)
at study.Throw.main(Throw.scala)
捕获异常
scala使用catch来捕获异常,通过catch语句里的模式匹配语句匹配异常。首先执行程序体,如果抛出异常,则依次尝试每个catch字句,如果没匹配到异常 try-catch 将终结,并把异常上升出去。
def catchTest(): Unit ={ try { val file=new FileReader("test.txt") //使用并关闭文件 }catch{ case ex:FileNotFoundException => println("file not found") case ex:IOException => } }
finally子句
如果想让某些代码无论方法如何中止都要执行的话,可以把表达式放在 finally 子句里。例如想让打开的文件即使在方法抛出异常退出的情况下也要确保关闭。通常 finally 子句做一些关闭文件或连接的清理工作。
def finallyTest(): Unit ={ val file=new FileReader("test.txt") try { //使用文件 }catch{ case ex:FileNotFoundException => println("file not found") case ex:IOException => }finally { //关闭文件 file.close() } }