1. 程式人生 > >Java多層嵌套異常處理的基本流程

Java多層嵌套異常處理的基本流程

gets ace 導致 兩層 多個 嵌套 都是 輸出 程序

異常是程序中的一些錯誤,但並不是所有的錯誤都是異常,錯誤有時候是可以避免的。異常的對象有兩個來源,一是Java運行時環境自動拋出系統生成的異常,而不管你是否願意捕獲和處理,它總要被拋出!比如除數為0的異常。二是程序員自己拋出的異常,這個異常可以是程序員自己定義的,也可以是Java語言中定義的,用throw 關鍵字拋出異常,這種異常常用來向調用者匯報異常的一些信息。

異常是針對方法來說的,拋出、聲明拋出、捕獲和處理異常都是在方法中進行的。

Java異常處理通過5個關鍵字try、catch、throw、throws、finally進行管理。基本過程是用try語句塊包住要監視的語句,如果在try語句塊內出現異常,則異常會被拋出,你的代碼在catch語句塊中可以捕獲到這個異常並做處理;還有以部分系統生成的異常在Java運行時自動拋出。你也可以通過throws關鍵字在方法上聲明該方法要拋出異常,然後在方法內部通過throw拋出異常對象。finally語句塊會在方法執行return之前執行。

使用try...catch捕獲異常。

執行try塊裏的業務邏輯代碼時出現異常,系統自動生成一個異常對象,該異常對象被提交給Java運行時環境,這個過程被稱為拋出(throw)異常。Java運行時環境收到異常對象時,會尋找能處理該異常對象的catch塊,如果找到合適的catch塊並把該異常對象交給catch塊處理那這個過程被稱為捕獲(catch)異常;如果Java運行時環境找不到捕獲異常的catch塊,則運行時環境終止,Java程序也將退出。

Java的異常體系:

技術分享圖片

訪問異常訊息。

如果程序需要在catch塊中訪問遺常對象的相關信息,可以通過調用catch後異常形參的方法來獲得。當Java運行時決定調用某個catch塊來處理該異常對象時,會將該異常對象賦給catch塊後的異常參數,程序就可以通過該參數來獲得該異常的相關信息。所有的異常對象都包含了如下幾個常用方法:getMessage():返回該異常的詳細描述字串。printStackTrace():將該異常的跟蹤棧信息輸出到標準錯誤信息輸出。printStackTrace(PrintStream s):將該異常的跟蹤棧信息輸出到指定輸出流。getStackTrace():返回該異常的跟蹤棧信息。

異常處理:

try

{

需要檢測的代碼;

}

catch(異常類 變量)

{

異常處理代碼;

}

finally

{

一定會執行的代碼;

}

異常處理的嵌套。

異常處理流程代碼可以放在任何能放可執行性代碼的地方,因此完整的異常處理流程既可放在try塊裏,也可放在catch塊裏,也可放在finally塊裏。

異常處理嵌套的深度沒有明確的限制,但通常沒有必要使用超過兩層的嵌套異常處理,層次太深的嵌套異常處理沒有太大必要,而且導致程序可讀性降低。

checked異常與Runtime異常:

Java的異常被分為兩大類:Checked異常和Runtime異常(運行時異常)。所有RuntimeException類及其子類的實例被稱為Runtime異常;不是RuntimeException類及其子類的異常實例則被稱為Checked異常。

Checked異常的處理:

當前方法明確知道如何處理該異常,程序應該使用try...catch塊來捕獲該異常,然後在對應的catch塊中修改該異常。當前方法不知道如何處理這種異常,應該在定義該方法時聲明拋出該異常。

Runtime異常的處理:

Runtime異常則更加靈活,Runtime異常無需顯示聲明拋出。如果程序捕捉Runtime異常,也可以使用try...catch塊來捕捉Runtime異常。

使用throws聲明拋出異常:

throws聲明拋出異常的思路是:當前方法不知道應該如何這種類型的異常,該異常應該由上一級調用者處理,如果main方法也不知道應該如何處理這種類型的異常,也可以使用throws聲明拋出異常,該異常交給JVM處理。JVM對異常的處理方法是:打印異常跟蹤棧信息,並中止程序的運行,這就是程序在遇到異常後自動結束的原因。

throws聲明拋出只能在方法簽名中使用,throws可以聲明拋出多個異常類,多個異常類之間以逗號隔開。

如果需要在程序中自行拋出異常,應使用throw語句,throw語句可以單獨使用,throw語句拋出的不是異常類,而是一個異常實例,而且每次只能拋出一個異常實例。throw語句的語法格式如下:throw ExceptionInstance;

如果throw語句拋出的異常是Checked異常,則該throw語句要麽處於try塊裏,顯示捕獲該異常,要麽放在一個帶throws聲明拋出的方法中,即把該異常交給方法的調用者處理。

異常處理原則:

不要過度使用異常;

不要使用過於龐大的try塊;

避免使用Catch AII 語句;

不要忽略捕獲到異常。

Java多層嵌套異常處理的基本流程