dart系列之:dart语言中的异常
文章目錄
- 簡介
- Exception和Error
- Throw和catch
- Finally
- 總結(jié)
簡介
Exception是程序中的異常情況,在JAVA中exception有checked Exception和unchecked Exception。那么在dart中的情況是不是一樣的呢?一起來看看吧。
Exception和Error
Dart中表示異常的類有兩個,分別是Exception和Error。他們兩個有什么區(qū)別呢?
Exception是由VM或者dart code中拋出的。
Exception主要用來表示用戶程序編寫過程中產(chǎn)生的異常,是可以定位到的可以解決的異常。通常來說Exception中包含了足夠的信息來方便用戶來定位異常點。
所以Exception通常是需要被catch的。但是和java不同的是,dart中所有的異常都是unchecked 異常,也就是說dart中的異常并不強制要求被捕獲,是否捕獲異常是由程序員自行決定的。
構(gòu)造一個異常很簡單,如下所示:
Exception("message")但是dart并不推薦這樣使用,因為這樣構(gòu)造的異常太過通用了,即使捕獲到這樣的異常,可以獲得信息也比較少。所以dart推薦拋出自定義異常,也就是說根據(jù)業(yè)務(wù)需要去創(chuàng)建Exception對應(yīng)的類,然后根據(jù)業(yè)務(wù)需要進行拋出。
dart中也有很多Exception的子類,比如FormatException來表示各種不同的異常情形。
同樣的,在JAVA中也是這樣推薦的,不要直接拋出Exception,而是根據(jù)業(yè)務(wù)需要拋出自定義的異常。
和JAVA一樣,dart中的Error表示的是一個嚴重的錯誤,Error是應(yīng)該在程序編寫過程中需要避免的。
dart中的Error并不需要被捕獲,因為發(fā)生了Error就表示程序出現(xiàn)了非常嚴重的錯誤,已經(jīng)無法運行下去了。
所以Error是我們在程序編寫過程中需要避免的。
Throw和catch
如果程序產(chǎn)生了異常,則可以使用Throw語句將其拋出,然后在合適的地方使用catch進行捕獲。
比如我們throw一個格式異常:
throw FormatException('這是一個格式異常');但是在dart中,不僅僅可以throw Exception或者Error,任何一個Object都可以throw出去,如下所示:
throw "這是一個異常!";拋出的異常可以使用catch來捕獲:
try{do something }catch(e){}dart也可以捕獲特定的異常,這種情況用on語句來表示,如下:
try {someException(); } on OutOfIndexException {// 捕獲特定的異常doSomething(); } on Exception catch (e) {// 捕獲其他的Exceptionprint('其他的異常: $e'); } catch (e) {// 處理剩下的異常print('剩下的異常: $e'); }dart中的catch可以指定兩個參數(shù),第一個參數(shù)就是throw的異常,第二個參數(shù)是StackTrace對象:
try { } catch (e, s) {print('異常信息: $e');print('堆棧信息: $s'); }在處理完異常之后,如果想要再將其拋出,可以使用rethrow:
void doSomething(){try{}catch (e) {print('get exception');rethrow; // rethrow這個異常} }Finally
和JAVA一樣,dart中也有Finally,用來進行最終的處理。Finally會在所有的catch語句執(zhí)行完畢之后執(zhí)行:
try {doSomething(); } catch (e) {print('Error: $e'); } finally {cleanUpJob(); // 最后的清理工作 }總結(jié)
以上就是dart中的異常和對異常的處理。
本文已收錄于 http://www.flydean.com/05-dart-exception/
最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發(fā)現(xiàn)!
歡迎關(guān)注我的公眾號:「程序那些事」,懂技術(shù),更懂你!
總結(jié)
以上是生活随笔為你收集整理的dart系列之:dart语言中的异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dart系列之:dart语言中的特殊操作
- 下一篇: dart系列之:dart类中的构造函数