結構化異常

2021-06-26 16:51:53 字數 868 閱讀 6648

try,catch,finally

catch中的**是對異常的恢復操作。比如有狀態的恢復,回滾。

finally是做一些清理工作。

foreach,using,lock實際上就是轉換成try finally這種結構**,finally中就是物件的清理,foreach是對inumerator.dispose(),lock是對鎖物件的釋放,using也是呼叫了物件的dipose方法。

catch的處理三種方式

一種是重新對異常的上拋,丟擲後先執行是到catch中間的finally**。

一種是拋出新的異常。

這兩種方式都可以新增一些異常資訊的描述。

還有一種是就是不丟擲,進入下面的finally

throw和thorw e的區別:throw e會重置異常的起點,影響的就是堆疊跟蹤。

未處理異常:就是異常丟擲後,沒有被catch住,這樣就會導致程序終止,異常資訊可以在系統日誌中查到,這種異常屬於程式的bug,應該在產品交付之前都處理調。

我也看了一些系統異常的設計,異常分為使用者異常,執行時異常和程式設計師異常。

使用者的異常就是指那些使用者的錯誤輸入造成程式無法完成功能,這種異常應該全部捕獲,並以一定格式的資訊反饋給使用者,告訴使用者輸入錯誤,正確的輸入範圍,並且應該強制使用者重新輸入。

執行時的異常是指那些由於使用了一些資源,比如檔案,連線資料庫等操作沒有按照正常執行。

程式設計師的異常,我的理解是函式級別的異常,如果引數不正確導致函式無法按照功能執行,我覺得應該丟擲給使用程式,因為如果不丟擲上層程式根本不知道發生錯誤繼續執行,會導致無法預期的後果。

對於除了使用者引發的異常外都應該記錄在日誌檔案中,以便程式設計師在調式過程中定位錯誤,日誌檔案的寫入可以設計出來乙個標誌,提交給客戶之後,這些異常就不用再寫日誌了。

Try Catch結構化異常處理

try.catch.會損耗一定的效能,但不會造成效能瓶頸。建議使用try.catch。盡可能的考慮到可能存在的異常並進行處理,盡可能的少出現異常或不出現異常。不要濫用資料庫事務提高效能,這樣可能會造成併發訪問的效能問題或效能瓶頸。不要使用try.catch進行流程處理。如果可能的話,盡量要把迴圈寫在...

SEH結構化異常處理03

執行緒上的異常處理 異常處理函式原型 返回值有兩種 exceptioncontinueexecution異常已解決,exceptioncontinuesearch此seh未解決問題,繼續在seh鏈中搜尋 exception disposition cdecl except handler in st...

結構化 半結構化和非結構化資料

在實際應用中,我們會遇到各式各樣的資料庫如nosql非關聯式資料庫 memcached,redis,mangodb rdbms關聯式資料庫 oracle,mysql等 還有一些其它的資料庫如hbase,在這些資料庫中,又會出現結構化資料,非結構化資料,半結構化資料,下面列出各種資料型別 結構化資料 ...