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


《數據結構與抽象:Java語言描述(原書第4版)》一JI2.2.1 延緩處理:throws子句

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

JI2.2.1 延緩處理:throws子句

假定一個方法,它返回從磁盤讀入的字符串。現在先不用擔心這個方法如何完成這項任務,我們將在附錄E中學習如何寫這樣的程序。不過,要知道從磁盤讀入時可能會發生錯誤。這件事會產生一個IOException異常。因為IOException是受檢異常,所以它必須被處理。我們可以在方法體內處理異常。但有時,程序員不能肯定異常發生時怎麼做對客戶是最好的。是應該終止執行,還是進行其他的處理更有意義?當不能肯定要采取哪個動作時,可以讓方法的客戶來處理異常。隻要異常能在某個地方被處理了,你就不需要在方法內來處理它。
一個方法可能引起受檢異常但又不處理它,就必須在方法頭聲明這件事。例如,如果方法readString拋出一個IOException異常但不處理它,則它的方法頭應該是如下這樣的:
image

突出部分稱為throws子句(throws clause)。它表明方法readString不用處理執行期間可能發生的IOException類型的異常。但如果另一個方法調用readString方法,則那個方法必須處理異常。調用方法可以自己處理IOException,也可以在它的方法頭中包含一個throws子句告訴它的客戶來處理異常。最終,每個拋出的受檢異常都應該在程序的某個地方被處理。
你可以在throws子句中列出多個用逗號分開的受檢異常。

語法:throws子句

方法頭可以含有一個throws子句,它列出該方法能拋出但不處理的異常。該子句的語法如下:
image

exception-list(異常列表)中的異常名用逗號分隔。它們的次序不重要。

注:如果方法可能拋出一個受檢異常,或者在方法頭寫throws子句聲明它,或者在方法內處理它;否則,會導致語法錯誤。

如果方法可能拋出未檢異常,則可以在throws子句中聲明它,或者處理它,但也可以什麼都不做。

注:javadoc標簽@throws

對於方法可能拋出的每個異常,在方法頭之前的javadoc注釋中,應該用單獨的一行來說明。每個這樣的行都要以標簽@throws開頭,並且它們應該按異常名的字典序排列。所有受檢異常必須被說明。
運行時異常可以說明也可以不說明,且一般不說明。但是,設計人員可以說明客戶或許很想處理的那些運行時異常。事實上,你會在Java類庫中遇到一些被說明的運行時異常。但要知道,你使用的方法或許會導致一個未說明的運行時異常。如果你決定說明運行時異常,則它們不應該依賴於方法的定義方式。所以,標出方法可能拋出的異常,應該作為設計和規格說明的一部分,而不是實現的一部分。

注:如果方法拋出一個異常但沒有處理它,則方法結束執行

如果方法拋出一個異常但沒有處理它,則方法的執行將結束。例如,如果前一個方法readString拋出一個IOException,則它的執行立即結束。但程序繼續執行,異常傳給readString的客戶。
程序設計技巧:當定義一個可能拋出受檢異常的方法時,如果不能提供對異常的合理反應,則要在方法頭寫一個throws子句將異常傳給方法的客戶。避免在throws子句中使用Exception,因為這樣做,不會給其他程序員提供關於調用方法的任何有用信息。而是要盡量指明異常。

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

  上一篇:go  mysql數據庫如何創建索引
  下一篇:go  《數據結構與抽象:Java語言描述(原書第4版)》一JI2.2 處理異常