異常處理機制

2021-09-03 02:59:09 字數 2088 閱讀 4181

異常處理的三個步驟:檢查異常,丟擲異常,處理異常

異常處理基本原理:把需要檢測的程式放到try塊中,把異常處理的程式放在catch塊中。如果執行乙個函式出現了異常,可以丟擲異常資訊。然後查詢try塊下面的catch塊是否可以處理該異常。如果該函式不處理該異常,將傳遞給它的上一級函式(呼叫函式),如果它的上一級函式收到異常後也不處理,將逐層向上傳遞。如果傳遞到了第一層(如main函式)也不處理,最後只能異常中止程式的執行。

如果異常在任何乙個環節被處理,處理完成後,將繼續執行處理異常的catch塊下面的**

1、丟擲異常

丟擲異常:可以使用throw表示式丟擲異常,將異常拋擲給主調函式處理,異常通常以類似於實參傳遞給函式的方式(由throw)丟擲和(被catch)捕獲,throw表示式的型別決定了所丟擲異常的型別。

由於c++是根據型別來區分不同的異常的,因此在丟擲異常時,throw表示式的值沒有實際意義,而表示式的型別則是非常重要的。如果程式中有多處要丟擲異常,應該用不同的表示式型別來相互區別。

丟擲異常表示式: throw 表示式

int a = 1; throw a;  int 型別

throw 333.33; float 型別

throw 『a』; 字元型

關於throw的說明:

(1)執行throw的時候,不會執行跟在throw後面的語句,而是將程式從throw轉移到匹配的catch,該catch可以是同一函式中的catch,也可以在直接或間接呼叫發生異常的上級函式中。

(2)被丟擲的物件是乙個用throw表示式初始化的「異常物件」。異常物件由throw建立,並初始化為被丟擲的表示式副本。異常物件將傳遞給對應的catch,並在異常處理完成後撤銷。因此異常物件必須是可以複製的型別(具有複製建構函式)。

(3)如果丟擲的是陣列,被丟擲的物件自動轉換為指向該陣列首元素的指標。如果丟擲的是乙個函式,函式被轉換為指向該函式的指標。

(4)如果丟擲乙個指標,該指標是乙個指向派生類物件的基類指標,則那個物件將被分割,只丟擲基類的部分。

(5)丟擲指向區域性物件的指標總是錯誤的,因為丟擲指標的時候,必須保證進入異常處理程式是指標所指向的物件依然存在。

2、捕獲異常

檢測捕獲異常的一般形式:

當try塊中的**丟擲異常,並且被某個catch塊捕獲後,一旦catch子句執行結束,程式流程繼續執行緊隨其後的最後乙個catch子句後面的語句。

catch子句中的異常說明符是有乙個形參的形參列表,有三種形式:

catch(型別名a) //不關心異常型別之外的資訊

catch(型別名a   a) //攜帶了異常之外的資訊

catch(...) //捕獲所有異常,一般放在最後乙個

3、處理異常(catch塊中處理,略)

異常處理執行流程

(1)程式流程到達try塊,然後執行try塊內的程式塊。如果沒有引起異常,那麼跟在try塊後面的catch子句都不執行,程式從最後乙個catch子句後面的語句繼續執行下去。

(2)丟擲異常的時候,將暫停當前函式的執行,開始查詢匹配的catch語句。

(3)首先檢查throw是否在try內部,如果是,檢查本函式內部的catch子句,如果其中之一與丟擲異常物件相匹配,就處理異常;如果找不到,退出當前函式,然後繼續在呼叫函式中查詢。

(4)在呼叫函式中,檢查與該try塊相關的catch子句,如果找到匹配的catch,就處理異常;如果找不到,則退出呼叫函式,然後繼續在呼叫這個函式的函式中查詢,以此類推。

(5)當catch子句被找到時,執行catch子句內部的處理程式。當catch結束時,跳轉到該try塊的最後乙個catch子句之後的語句繼續執行。

4、重拋異常

在catch子句中,可以再次丟擲異常,例如:

trycatch(const char * )

其中throw不加表示式,表示再次丟擲try塊中檢測到的異常表示式(throw 「hello」)

重拋異常不能被try-catch捕獲,只能傳到上一級函式。

異常處理機制

1 c 中異常處理機制使得異常的引發和異常的處理不必在同乙個函式中。2 異常是專門針對抽象程式設計中的一系列錯誤處理的,c 的函式機制是棧結構,先進後出,依次訪問,無法跳躍。3 異常超脫於函式機制,決定了其對函式的跨越式回跳。4 異常跨越函式 普通用法 基本用法 void add int a,int...

異常處理機制

異常處理機制分為以下2點 異常處理五個關鍵字 try catch finally throw throws 用了try catch程式出現異常不會終止,會丟擲異常繼續執行下面任務 public static void main string args catch error e catch exce...

異常處理機制

try catch exception e finally throw 將產生的異常丟擲 強調的是動作 丟擲的既可以是異常的引用,也可以是異常物件。位置 方法體內 throws 如果乙個方法可能會出現異常,但沒有能力處理這種異常,可以在方法宣告處用throws子句來宣告丟擲異常。用它修飾的方法向呼叫...