C 中throw的用法 異常路徑

2021-07-13 04:10:46 字數 1177 閱讀 2442

在c#的異常處理中,有乙個關鍵字是throw,大家一定在catch塊中或多或少的使用過,那麼是否注意過不同的throw語句丟擲的異常有何區別,請看下面的例子。

例1

class program

catch (exception ex)}}

class class1

}class class2

catch (exception ex)}}

使用log4net輸出的日誌如下:

例2下一步,我們將class2稍作修改

class class2

catch (exception ex)}}

輸出日誌如下:

例3我們再來修改下class2,這一次的改動稍微增大

仔細觀察三次的異常日誌一定會有所發現,。在例1中,雖然異常的描述資訊是class1,但是log4net記錄的異常堆疊資訊缺沒有class1的蹤影,只記錄下了class2.test()。而例2中的日誌不只記錄下了異常的描述資訊,而且完整的記錄下了引發異常方法的呼叫資訊。

不同點在**,請注意例1中在throw的時候使用了引數ex,而例2沒有引數,這個無參的throw可以看做為rethrow(即繼續丟擲),他會丟擲之前捕獲到的所有異常。而2中帶引數的則不同,他雖然會丟擲同樣的異常,但是異常的堆疊資訊缺在throw的時候被改變了,我們在接下來的try塊中無法獲取異常的原始資訊。例3則完全是乙個新的異常,class1中丟擲的異常被當做內部異常,存放在innerexception中。

c#為我們提供了相當完備的異常路徑,我們可以通過不同的throw方式使異常的路徑可選。在實際的使用中需要根據不同的使用場景,選擇不同的throw方式。比如需要檢視完整的異常路徑時,我們應該使用2中的方式,即不帶引數的throw。

java異常處理中throw和throws的區別?

throw和throws的區別主要有兩點!1 throw 後面跟的是物件,throws後面跟的是異常類 2 throw 定義函式體的內部,throws定義在函式名後。丟擲異常物件的型別 class demo 自定義異常要繼承exception 類 class myexception extends ...

Java中處理異常throw和throws

throw關鍵字 語句丟擲異常 throws關鍵字 宣告異常 方法丟擲乙個異常 01.throw 是語句丟擲乙個異常。語法 throw 異常物件 throw e 02.throws 是方法可能丟擲異常的宣告。用在宣告方法時,表示該方法可能要丟擲異常 呼叫者必須做出處理 捕獲或繼續丟擲 語法 修飾符 ...

C 異常處理 使用throw引發異常

c 提供了throw語句來引發異常。使用throw語句既可以引發系統異常,也可以引發自定義異常。使用throw語句丟擲異常的語法如下 throw exobject exobject 所要丟擲的異常物件,這個異常物件是派生自system.exception類的類物件。例項 如下 using syste...