Java異常處理機(jī)制及自定義異常
我們總是試圖避免在軟件程序中錯(cuò)誤的發(fā)生,但是百分之百?zèng)]有錯(cuò)誤的程序是不存在的。無(wú)論怎樣,如果我們能適當(dāng)?shù)奶幚礤e(cuò)誤,將會(huì)極大的改善程序的可讀性、可靠性以及可維護(hù)性。Java編程語(yǔ)言使用異常來(lái)處理錯(cuò)誤。
我們總是試圖避免在軟件程序中錯(cuò)誤的發(fā)生,但是百分之百?zèng)]有錯(cuò)誤的程序是不存在的。無(wú)論怎樣,如果我們能適當(dāng)?shù)奶幚礤e(cuò)誤,將會(huì)極大的改善程序的可讀性、可靠性以及可維護(hù)性。Java編程語(yǔ)言使用異常來(lái)處理錯(cuò)誤。
異常處理程序的基本形式如下:
method() throws ExceptionType1, ExceptionType2, …{ try { // 程序塊 } catch (ExceptionType1 e) { // 對(duì)ExceptionType1的處理 } catch (ExceptionType2 e) { // 對(duì)ExceptionType2的處理,處理了一部分,throw(e); 再拋出這個(gè)“異?!苯o上層的調(diào)用者 } finally { // 總是要執(zhí)行的語(yǔ)句 } }
異常對(duì)象
每個(gè)異常都是一個(gè)對(duì)象,它是Throwable類(lèi)或其它子類(lèi)的實(shí)例。當(dāng)一個(gè)方法出現(xiàn)異常后便拋出一個(gè)異常對(duì)象,該對(duì)象中包含有異常信息,調(diào)用這個(gè)對(duì)象的方法可以捕獲到這個(gè)異常并進(jìn)行處理。Throwable類(lèi)有兩個(gè)標(biāo)準(zhǔn)子類(lèi):錯(cuò)誤類(lèi)()和異常類(lèi)()。
異常類(lèi)的繼承關(guān)系
在實(shí)際的程序開(kāi)發(fā)中,異常無(wú)處不在,并且種類(lèi)繁多。區(qū)分什么情況下會(huì)出現(xiàn)什么樣的異常是十分必要的。異常可以根據(jù)發(fā)生的原因進(jìn)行分類(lèi),以及編譯時(shí)對(duì)異常的檢查情況,分為可檢測(cè)異常和不可檢測(cè)異常兩種。
異常捕獲
Java的異常處理是通過(guò)try、catch、throw、throws和finally這5個(gè)關(guān)鍵詞來(lái)實(shí)現(xiàn)的。通過(guò)在代碼中使用try選定監(jiān)控異常的范圍,然后使用catch捕獲異常,最終可以對(duì)異常進(jìn)行處理。若在try塊中拋出的異常沒(méi)有被捕獲,Java將退出當(dāng)前方法并向上層調(diào)用者傳遞異常。
創(chuàng)建自定義異常
有時(shí)候Java類(lèi)庫(kù)中提供的異常處理類(lèi)無(wú)法滿足特定需求,需要自定義異常。創(chuàng)建自定義異常非常簡(jiǎn)單,只需要定義一個(gè)繼承自Exception的新類(lèi)即可。例如,如果需要提示水位過(guò)高的異常,可以創(chuàng)建一個(gè)自定義異常類(lèi),如下所示:
class MyException extends Exception { private int i; MyException(int a) { i a; } public String toString() { return "水位過(guò)高"; } }
通過(guò)自定義異常,可以更靈活地處理程序中出現(xiàn)的特殊情況,提高程序的可維護(hù)性和擴(kuò)展性。