在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...