為什麼要加乙個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 ...