dart系列之:dart語言中的異常


簡介

Exception是程序中的異常情況,在JAVA中exception有checked Exception和unchecked Exception。那么在dart中的情況是不是一樣的呢?一起來看看吧。

Exception和Error

Dart中表示異常的類有兩個,分別是Exception和Error。他們兩個有什么區別呢?

Exception是由VM或者dart code中拋出的。

Exception主要用來表示用戶程序編寫過程中產生的異常,是可以定位到的可以解決的異常。通常來說Exception中包含了足夠的信息來方便用戶來定位異常點。

所以Exception通常是需要被catch的。但是和java不同的是,dart中所有的異常都是unchecked 異常,也就是說dart中的異常並不強制要求被捕獲,是否捕獲異常是由程序員自行決定的。

構造一個異常很簡單,如下所示:

Exception("message")

但是dart並不推薦這樣使用,因為這樣構造的異常太過通用了,即使捕獲到這樣的異常,可以獲得信息也比較少。所以dart推薦拋出自定義異常,也就是說根據業務需要去創建Exception對應的類,然后根據業務需要進行拋出。

dart中也有很多Exception的子類,比如FormatException來表示各種不同的異常情形。

同樣的,在JAVA中也是這樣推薦的,不要直接拋出Exception,而是根據業務需要拋出自定義的異常。

和JAVA一樣,dart中的Error表示的是一個嚴重的錯誤,Error是應該在程序編寫過程中需要避免的。

dart中的Error並不需要被捕獲,因為發生了Error就表示程序出現了非常嚴重的錯誤,已經無法運行下去了。

所以Error是我們在程序編寫過程中需要避免的。

Throw和catch

如果程序產生了異常,則可以使用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) {
  // 捕獲其他的Exception
  print('其他的異常: $e');
} catch (e) {
  // 處理剩下的異常
  print('剩下的異常: $e');
}

dart中的catch可以指定兩個參數,第一個參數就是throw的異常,第二個參數是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語句執行完畢之后執行:

try {
  doSomething();
} catch (e) {
  print('Error: $e'); 
} finally {
  cleanUpJob(); // 最后的清理工作
}

總結

以上就是dart中的異常和對異常的處理。

本文已收錄於 http://www.flydean.com/05-dart-exception/

最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

歡迎關注我的公眾號:「程序那些事」,懂技術,更懂你!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM