Scala的异常通过try catch finally来处理,类似java,但是有诸多不同:
try {
remoteCalculatorService.add(1, 2)
} catch {
case e: ServerIsDownException => log.error(e, "the remote calculator service is unavailable. should have kept your trusty HP.")
} finally {
remoteCalculatorService.close()
}
不像Java中使用多个catch语句,Scala用一个catch语句捕获所有异常,然后根据模式匹配决定异常如何处理,逻辑上与Java的多个catch是一样的。
很重要的一点,try整个也是作为表达式( expression-oriented),可以将整个try赋给其他变量。
val result: Int = try {
remoteCalculatorService.add(1, 2)
} catch {
case e: ServerIsDownException => {
log.error(e, "the remote calculator service is unavailable. should have kept your trusty HP.")
0
}
} finally {
remoteCalculatorService.close()
}
这样就不需要像Java现在try外面生命变量,然后在try或catch中给变量赋值。需要注意的是:finally块会在异常被处理(如果有)后执行,但是finally不作为表达式的一部分(因此没有返回值)