Scala 異常處理

scala 異常處理

scala 的異常處理和其它語言比如 java 類似。

scala 的方法可以通過拋出異常的方法的方式來終止相關(guān)代碼的運(yùn)行,不必通過返回值。

 

1. 拋出異常

scala 拋出異常的方法和 java一樣,使用 throw 方法,例如,拋出一個(gè)新的參數(shù)異常:

throw new illegalargumentexception

 

2. 捕獲異常

異常捕捉的機(jī)制與其他語言中一樣,如果有異常發(fā)生,catch 字句是按次序捕捉的。因此,在 catch 字句中,越具體的異常越要靠前,越普遍的異常越靠后。 如果拋出的異常不在 catch 字句中,該異常則無法處理,會(huì)被升級到調(diào)用者處。

捕捉異常的 catch 子句,語法與其他語言中不太一樣。在 scala 里,借用了模式匹配的思想來做異常的匹配,因此,在 catch 的代碼里,是一系列 case 字句,如下例所示:

import java.io.filereader
import java.io.filenotfoundexception
import java.io.ioexception

object test {
? ?def main(args: array[string]) {
? ? ? try {
? ? ? ? ?val f = new filereader("input.txt")
? ? ? } catch {
? ? ? ? ?case ex: filenotfoundexception =>{
? ? ? ? ? ? println("missing file exception")
? ? ? ? ?}
? ? ? ? ?case ex: ioexception => {
? ? ? ? ? ? println("io exception")
? ? ? ? ?}
? ? ? }
? ?}
}

執(zhí)行以上代碼,輸出結(jié)果為:

$ scalac test.scala 
$ scala test
missing file exception

catch字句里的內(nèi)容跟match里的case是完全一樣的。由于異常捕捉是按次序,如果最普遍的異常,throwable,寫在最前面,則在它后面的case都捕捉不到,因此需要將它寫在最后面。

 

3. finally 語句

finally 語句用于執(zhí)行不管是正常處理還是有異常發(fā)生時(shí)都需要執(zhí)行的步驟,范例如下:

import java.io.filereader
import java.io.filenotfoundexception
import java.io.ioexception

object test {
? ?def main(args: array[string]) {
? ? ? try {
? ? ? ? ?val f = new filereader("input.txt")
? ? ? } catch {
? ? ? ? ?case ex: filenotfoundexception => {
? ? ? ? ? ? println("missing file exception")
? ? ? ? ?}
? ? ? ? ?case ex: ioexception => {
? ? ? ? ? ? println("io exception")
? ? ? ? ?}
? ? ? } finally {
? ? ? ? ?println("exiting finally...")
? ? ? }
? ?}
}

執(zhí)行以上代碼,輸出結(jié)果為:

$ scalac test.scala 
$ scala test
missing file exception
exiting finally...

下一節(jié):scala 提取器(extractor)

scala 教程

相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频