優(yōu)勢(shì)3:分組和區(qū)分錯(cuò)誤類(lèi)型
因?yàn)樗性诔绦騼?nèi)部拋出的異常都是對(duì)象,異常的分組或分類(lèi)是類(lèi)繼承的自然結(jié)果。在Java平臺(tái)中一組相關(guān)異常類(lèi)的例子是在java.io中定義的IOException和它的子類(lèi)。IOException是最普通的IO異常管理類(lèi),并且它描述了在執(zhí)行I/O操作時(shí)所發(fā)生的任意的錯(cuò)誤類(lèi)型。它的子類(lèi)描述了一些特殊的錯(cuò)誤。例如,F(xiàn)ileNotFoundException異常類(lèi)代表不能在本地磁盤(pán)上找到一個(gè)文件。
一個(gè)方法能夠編寫(xiě)特殊的異常處理器,使它能夠處理非常特殊的異常。FileNotFoundException異常類(lèi)沒(méi)有子類(lèi),因此下面的異常處理器只能處理一種異常類(lèi)型:
catch (FileNotFoundException e) { ... } 一個(gè)方法能夠基于它的分組或通過(guò)在catch子句中所指定的任何異常的超類(lèi)的一般類(lèi)型來(lái)捕獲異常。例如,要捕獲所有的I/O異常,而不管它們的具體類(lèi)型,就可以在異常處理器中指定一個(gè)IOException參數(shù):
catch (IOException e) { ... } 這個(gè)處理器將捕獲所有的I/O異常,包括FileNotFoundException,EOFException等等。你能夠通過(guò)查詢(xún)傳遞給異常處理器的參數(shù)找到發(fā)生錯(cuò)誤的詳細(xì)信息。例如,打印堆棧執(zhí)行路線:
catch (IOException e) { e.printStackTrace(); // output goes to Sytem.err e.printStackTrace(System.out); // send trace to stdout } 你甚至可以創(chuàng)建一個(gè)能夠處理任意類(lèi)型的異常的異常處理器:
catch (Exception e) { // a (too) general exception handler ... } Exception類(lèi)是Throwable類(lèi)結(jié)構(gòu)中的頂級(jí)類(lèi),因此,這個(gè)處理器將捕獲除了那些被特定處理器捕獲的異常以外的異常。你可能想你的程序是否都是這種處理異常的方法,例如,為用戶(hù)打印錯(cuò)誤消息并且退出。
但是,在大多數(shù)情況下,你需要異常處理器來(lái)盡可能的處理精確一些。原因是在處理器決定最好的恢復(fù)策略之前,必須做第一件是判斷發(fā)生異常的類(lèi)型是什么。在沒(méi)有捕獲特定錯(cuò)誤的情況下,處理器必須有效的提供任意的可能性。Exception 處理器是最一般的異常處理器,使用這個(gè)處理器使得代碼捕獲和處理更多的程序員沒(méi)有預(yù)料到的錯(cuò)誤傾向,從而使得處理器沒(méi)有目的性。
象我們展示的一樣,你能夠創(chuàng)建異常組,并且用一般化的方式來(lái)處理異常,或者使用特定異常類(lèi)型來(lái)區(qū)分異常并且用精確的方式來(lái)處理異常。
捕獲和處理異常 這段向說(shuō)明怎樣使用異常處理器的三個(gè)組成部分-try,catch和finally塊來(lái)編寫(xiě)異常處理器。這段最后舉一個(gè)例子,并且分析在不同的情況下發(fā)生了什么。
|
溫馨提示:喜歡本站的話(huà),請(qǐng)收藏一下本站!