閱讀1005 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《數據結構與抽象:Java語言描述(原書第4版)》一JI2.1 基礎

本節書摘來華章計算機《數據結構與抽象:Java語言描述(原書第4版)》一書中的第2章 ,第2.1節,[美]弗蘭克M.卡拉諾(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 羅得島大學  新英格蘭理工學院 辛運幃 饒一梅 譯 更多章節內容可以訪問雲棲社區“華章計算機”公眾號查看。

JI2.1 基礎

當在一個方法內發生異常時,該方法創建一個異常對象,並將它傳給Java運行時係統。我們說方法拋出(throw)一個異常。被拋出的異常是發給程序的其他部分的一個信號,表示某些意外的事情發生了。根據異常類的類型,以及異常對象通過其方法告訴我們的信息,代碼可以對其進行適當的響應處理。當發現並響應異常時,就是處理(handle)異常。
異常屬於不同的類,不過所有這些類都是標準類Throwable的後代。Throwable在Java類庫中,不需要import語句就可以使用。異常分為以下三組:

  • 受檢異常,它必須被處理。
  • 運行時異常,它不需要處理。
  • 錯誤,它不需要處理。

受檢異常(checked exception)是程序執行期間發生的嚴重事件的後果。例如,如果程序從磁盤讀數據,而係統找不到含有數據的文件,將發生受檢異常。這個異常所屬類的類名是FileNotFoundException。用戶提供給程序的可能是一個錯誤的文件名。寫得好的程序應該提前預見這個事件,可能要求使用者再次輸入文件名,以便能從中恢複正常。這個名字,與Java類庫中所有異常類的名字一樣,是用來描述異常原因的。通常的做法是使用類名來描述異常。例如,可能說發生了一個FileNotFoundException異常。受檢異常的所有類都是類Exception的子類,Exception是Throwable的後代。

注:Java類庫中的受檢異常
Java類庫中的下列類表示受檢異常,你或許會遇到它們:
image
運行時異常(runtime exception)通常是程序中邏輯錯誤的結果。例如,數組下標越界導致ArrayIndexOutOfBounds類的異常。被0除導致ArithmeticException異常。雖然可以添加代碼來處理運行時異常,但通常隻需要修改我們程序中的錯誤。運行時異常的所有類都是類RuntimeException的子類,它是Exception的後代。
注:Java類庫中的運行時異常
Java類庫中的下列類表示運行時異常,你或許會遇到它們:
image

錯誤(error)是標準類Error或其後代類的一個對象。將這樣的類都稱為錯誤類(error class)。注意,Error是Throwable的後代。一般地,錯誤是指發生了不正確的情況,如內存溢出。如果程序使用的內存超出了限度,則必須修改程序以使內存的使用更有效率,改變配置讓Java能訪問更多的內存,或為計算機購買更多的內存。這些情況都太嚴重了,一般程序很難處理。所以,即使處理錯誤是合法的,一般也不需要處理它們。
圖JI2-1展示了一些異常和錯誤類的層次關係。運行時異常,比如ArithmeticException,是RuntimeException的後代。受檢異常,例如IOException,是Exception的後代,但不是RuntimeException的後代。序言中段P.9中定義的斷言錯誤,是類AssertionError的對象,Error是AssertionError的父類。在第7章中討論遞歸時,將提到棧溢出錯誤。這個錯誤屬於類StackOverflowError。StackOverflowError和OutOfMemoryError都派生於抽象類VirtualMachineError,Error也是VirtualMachineError的父類。到目前為止,首要的一點是,我們要知道StackOverflowError、OutOfMemoryError和AssertionError的祖先類是Error而不是Exception,不過所有的異常和錯誤都派生於Throwable。


image

注:異常的層次
受檢異常、運行時異常和錯誤的類(共同稱為異常類(exception class))都是標準類Throwable的後代。運行時異常的所有類都派生於RuntimeException,而它又派生於Exception。受檢異常是派生於Exception的類的對象,但它不是RuntimeException的後代。運行時異常和錯誤稱為未檢異常(unchecked exception)。
注:很多異常類都在包java.lang中,所以不需要引入。但有些異常類在其他的包中,它們必須要引入。例如,當在程序中使用類IOException時,必須使用引入語句
image

我們會在附錄E中遇到這個異常。

最後更新:2017-06-26 18:02:35

  上一篇:go  6月26日雲棲精選夜讀:成為一名Java高級工程師你需要學什麼
  下一篇:go  《數據結構與抽象:Java語言描述(原書第4版)》一Java插曲2