點(diǎn)擊查看:2015計(jì)算機(jī)等級(jí)考試二級(jí)Java入門教程章節(jié)匯總
點(diǎn)擊查看:2015計(jì)算機(jī)等級(jí)考試二級(jí)Java入門教程第七章匯總
7.5 定義自己的異常
定義自己的異常類有兩個(gè)基本的原因:
在標(biāo)準(zhǔn)異常發(fā)生時(shí),希望增加一些信息,那么你叮以重新拋出你自己的異常類對(duì)象來完成這項(xiàng)操作。
在你的代碼中利用出現(xiàn)的錯(cuò)誤狀態(tài)保證特殊異常類的辨別。
然而,你應(yīng)該記住在拋出異常時(shí)會(huì)產(chǎn)生大量的開銷,因此,對(duì)于"正常地"恢復(fù)你期望頻繁執(zhí)行的代碼來說,這并不是一種很有效的方法。如果你恢復(fù)的代碼要被經(jīng)常地執(zhí)行,就不應(yīng)該把它放置在catch塊中,而是用一個(gè)if-then-else循環(huán)。
讓我們看看如何創(chuàng)建自己的異常。
定義一個(gè)異常類
在你定義異常類時(shí)。一定要把Throwable作為超類,否則是不允許的。雖然你可以從任何的標(biāo)準(zhǔn)異常類中派生出新的異常類,但是最好的策略還是從Exception類派生。這將使得編譯器能夠跟蹤程序中拋出這類異常的位置,檢查它們被捕獲了,還是在一個(gè)方法中聲明拋出它。如果你使用RuntimeException或者它的一個(gè)子類,編譯器將檢查你的異常類的catch塊是否將被禁止。
讓我們完成一個(gè)例子,看看如何定義一個(gè)異常類:
public class BreadfulProblemException extends Exception
{
//Constructors
public DreadfulProblemException()( ) //Default constructor
public DreadfulProblemException(String s)
{
super(s); //Call the base class constructor
}
}
這是你應(yīng)該提供的最少代碼。按照慣例,異常類應(yīng)該包括一個(gè)默認(rèn)的構(gòu)造函數(shù)和一個(gè)參數(shù)為String對(duì)象的構(gòu)造函數(shù)。超類Exception中存儲(chǔ)的信息(事實(shí)上,這些信息在Exception的超類Throwable中)將自動(dòng)地用類名進(jìn)行初始化,而無(wú)論你的類對(duì)象使用的是哪一個(gè)構(gòu)造函數(shù)。傳遞給第二個(gè)構(gòu)造函數(shù)的String將添加到類名的后面形成異常對(duì)象中存儲(chǔ)的信息。
當(dāng)然,你也可以增加一些其他的構(gòu)造函數(shù),通常,你在標(biāo)準(zhǔn)異常拋出后拋出自己的異常時(shí)特別希望這樣做。除此之外,最典型的是你想要把實(shí)例變量加到存儲(chǔ)問題額外信息的類中,再附加一方法來在catch塊的代碼中獲取這些數(shù)據(jù)。因?yàn)槟愕漠惓n愖罱K派生于Throwable類,所以它將自動(dòng)地能夠使用跟蹤棧。
相關(guān)推薦:
2015計(jì)算機(jī)等級(jí)考試二級(jí)Java入門教程章節(jié)匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |