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