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