throw 使用小結

2022-08-28 14:03:15 字數 1038 閱讀 7237

為什麼要加乙個throw()到你的函式中?

這是異常規範,只會出現在宣告函式中,表示這個函式可能丟擲任何型別的異常

void gettag() throw(int);表示只丟擲int型別異常

void gettag() throw(int,char);表示丟擲in,char型別異常

void gettag() throw();表示不會丟擲任何型別異常

void gettag() throw(...);表示丟擲任何型別異常

void gettag() throw(int);表示只丟擲int型別異常

並不表示一定會丟擲異常,但是一旦丟擲異常只會丟擲int型別,如果丟擲非

int型別異常,呼叫unexsetpion()函式,退出程式。

假如你加乙個throw()屬性到你的永遠不會丟擲異常的函式中,編譯器會非常聰明的知道**的意圖和決定優化方式。考慮下面的**:

顯示**列印01 class myclass  

02 ;  

08     size_t methodthatcannotthrow() throw()  

09     ;  

12     void examplemethod()  

13      

22         catch (...)  

23          

25     }  

26 };

當編譯器看到這個帶"throw()"屬性**的時候,編譯能夠優化這個"bar"變數,因為它知道從methodthatcannotthrow()函式中不會丟擲任何的異常。如果沒有這個throw()屬性,編譯器必須建立這個"bar"變數,因為假如methodthatcannotthrow丟擲了乙個異常,這個異常控制代碼可能會需要依靠這個bar變數。

另外,象prefast源**分析工具能夠(也會)用throw()注釋去優化他們的錯誤檢測能力----舉個例子,假如你有乙個try/catch而且所有呼叫的函式都已經標記了throw(),實際上你不需要這個try/catch(是的,假如你最後呼叫的函式可能丟擲異常這就會有個問題了)。

throw 使用小結

為什麼要加乙個throw 到你的函式中?這是異常規範,只會出現在宣告函式中,表示這個函式可能丟擲任何型別的異常 void gettag throw int 表示只丟擲int型別異常 void gettag throw int,char 表示丟擲in,char型別異常 void gettag thro...

手動使用throw丟擲異常

模擬註冊 public class 9catch illegalnameexception e 和顧客相關的業務 class customerservice 如果 能執行到此處,證明使用者名稱是合法的 system.out.println 註冊成功 自定義 無效名字異常 1.編譯時異常,直接繼承ex...

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

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