概述
程式設計的要求之一就是程式的健壯性。希望程式在運行時能夠不出或者少出問題。但是,在程式的實際運行時,總會有一些因素導致程式不能正常運行。
在設計算法時,往往對算法的正常邏輯處理流程設計得比較準確,對異常情況的處理反而不容易設計全面,導致程式在出現異常情況時崩潰。如果軟體出現這種情況會給用戶帶來極不友好的體驗。
舉一個簡單的例子,試設計一個程式,運行後提示用戶輸入兩個整數。兩個整數用空格隔開,用戶輸入後,程式顯示出兩個數字的和。這個程式正常的邏輯處理非常簡單,但普用戶輸入的兩個字元串不是整數,程式應該給出提示,否則程式有可能會崩潰。因此針對異常情況的處理也是非常重要的,當然有時這種處理會比較複雜。
常見異常
異常(Exception)是程式在運行時可能出現的會導致程式運行終止的錯誤。這種錯誤是不能通過編譯系統檢查出來的。常見的異常如下:
(1)系統資源不足。例如,記憶體不足,不可以動態申請記憶體空間;磁碟空間不足,不能打開新的輸出檔案等。
(2)用戶操作錯誤導致運算關係不正確。例如,出現分母為0。數學運算溢出,數組越界,參數類型不能轉換等。
異常特點
異常有以下的一些特點:
(1)偶然性。程式運行中,異常並不總是會發生。
(2)可預見性。異常的存在和出現是可以預見的。
(3)嚴重性。一旦異常發生,程式可能終止,或者運行的結果不可預知。
異常例子
在C++中,使用try、throw、catch三個關鍵字來實現異常處理。
try後面的複合語句稱為受保護段,受保護段的代碼有可能出現異常,因此在try部分進行異常檢測。如果檢測到異常,就通過throw語句拋擲這個異常。受保護段所調用的函式中也可以檢測和拋擲異常。所拋擲的異常,可以是一個整數、一個字元串、一個變數,甚至是一個類的對象。也就是說,異常是有不同類型的。
catch部分的作用是捕獲異常和處理異常。每個catch後的括弧內,都要指定一個“異常類型”,表明它可以捕獲哪種類型的異常。一旦捕獲到異常,就通過異常處理語句來進行處理。
程式執行的流程有兩種:
(1)沒有異常:try 受保護語句 其他語句。
(2)有異常:try 受保護語句 throw異常 catch 異常處理語句。
在編寫帶有異常處理的程式時,還要注意:
(1)try語句塊和catch語句塊是一個整體,兩者之間不能有其他的語句。
(2)一個try語句塊後面可以有多個catch語句,但是。不可以幾個try語句塊後面用一個catch語句。