程式異常問題

2021-10-06 06:46:01 字數 1719 閱讀 5721

為什麼要進行異常處理

程式因為各種原因出現問題導致的結果是程式直接崩潰,結果和開發過程出現的問題結果大不一樣。因此需要使用異常的處理來防止軟體系統崩潰

程式中的安全隱患

網路故障導致資料庫連線問題

使用者的非法操作(資料驗證失敗)

資料處理中的任何意外(例如:查詢超時,資源檔案丟失等)……

了解異常類exception

.net framework中的異常的設計結構

常見的異常類

與引數有關的異常

此類異常類均派生自systemexception,用於方法成員傳遞引數時發生的異常

argumentexception:用於處理引數無效的異常

formatexception:用於處理引數格式錯誤的異常

與陣列有關的異常

此類異常類均派生自systemexception

indexoutofrangeexception:用於處理索引超出陣列長度所引發的異常

arraytypemismatchexception:用於處理陣列中儲存資料型別不正確的元素所引發的異常

與io有關的異常

ioexception:用於處理進行檔案輸入輸出操作時所引發的異常

與記憶體溢位有關的異常

overflowexception:用於處理程式邏輯錯誤造成的死迴圈異常
與算術有關的異常

arithmeticexception:用於處理與算術有關的異常,比如0作為除數
與資料庫操作有關的異常

dbexception:用於處理所有資料來源操作異常類的基類

sqlexception:用於處理針對sql資料來源的異常,比如資料庫連線錯誤

處理異常的常用方法

異常處理的形式

即時處理:發現異常後隨時處理並恢復程式

丟擲異常:捕獲異常後,重新封裝異常資訊或直接拋給呼叫者

編寫異常處理的原則

在任何可能會發生異常的地方進行新增異常處理的方法

異常物件提供的重要資訊

屬性名稱   	             說明              

source 此屬性表示導致異常發生的應用程式或物件的名稱

message 提供引發異常的詳細描述資訊

stacktrace 提供在堆疊上所呼叫方法的詳細資訊,並首先顯示最近呼叫的方法

使用try-catch捕獲和處理

try中放可能會出現異常的**

catch中表示如果try中的**出現了異常則會直接進入到catch中執行

無論是否try中的**會不會發生異常,最終都會執行finally中的**

finally不是必須的模組

異常傳遞與自定義方法

異常處理和日常工作一樣

「底層方法」將第一次捕獲的異常傳遞給上級呼叫者進一步詳細處理

「中層呼叫者」可以用多路捕獲異常並封裝詳細異常資訊

「頂層呼叫者」即在使用者介面中繼續處理異常

相當於:

頂層呼叫者是客戶-出現異常只需要告訴客戶可能操作未成功的人性化原因描述

中層呼叫者-程式的開發人員,在開發程式時對於可能發生的異常進行初步處理

底層方法-維護人員,將異常的詳細資訊匯報,並進行異常處理

程式集異常問題

程式因為各種原因出現問題導致的結果是程式直接崩潰,結果和開發過程出現的問題結果大不一樣。因此需要使用異常的處理來防止軟體系統崩潰 網路故障導致資料庫連線問題 使用者的非法操作 資料驗證失敗 資料處理中的任何意外 例如 查詢超時,資源檔案丟失等 net framework中的異常的設計結構 此類異常類...

QT程式異常結束問題分析

qt程式異常結束分為 執行中異常結束往往就是程式卡死,長時間無法響應,或者響應一段時間後異常結束。卡死一段時間異常結束很大的可能就是記憶體洩漏的情況,首先檢查一下指標是否只定義了卻沒有沒有初始化,或者指向的內容為nullptr,直接使用了,導致使用的指標根本沒有東西,所以程式崩潰。啟動異常結束就是還...

異常處理程式(Exception handler)

當然,丟擲的異常必須在某處得到處理。這個 地點 就是 異常處理程式 exception handler 針對每個要捕獲的異常,你得準備相應的處理程式。異常處理程式緊跟在 try 區塊之後,以關鍵字 catch 表示 try catch type1 id1 catch type2 id2 catch ...