Effective Java(3rd)-Item74 記錄每個方法拋出的所有異常

??描述方法拋出的異常是正確使用方法所需文檔的重要部分狐树。因此,花時間仔細記錄每個方法拋出的所有異常是非常重要的(item56)。

??始終單獨聲明已檢查異常替梨,并使用Javadoc @throw標記精確地記錄每次拋出異常的條件撬腾。不要使用快捷方式聲明一個方法拋出它可以拋出的多個異常類的超類螟蝙。作為一個極端的例子,不要聲明公共方法拋出Exception时鸵,或者更糟胶逢,拋出Throwable厅瞎。除了拒絕向方法的用戶提供關(guān)于它能夠拋出的異常的任何指導之外,這樣的聲明還極大地阻礙了方法的使用初坠,因為它有效地掩蓋了可能在相同上下文中拋出的任何其他異常和簸。這個建議的一個異常是main方法,它可以安全地聲明為拋出異常碟刺,因為它只被VM調(diào)用锁保。
??雖然該語言不要求程序員聲明方法能夠拋出的未檢查異常,但明智的做法是像檢查異常一樣仔細地記錄它們半沽。未檢查異常通常表示編程錯誤( item70 )爽柒,讓程序員熟悉他們可能犯的所有錯誤可以幫助他們避免犯這些錯誤。方法可以拋出的未檢查異常的良好文檔列表有效地描述了成功執(zhí)行的先決條件者填。每個公共方法的文檔都必須描述它的先決條件(item56)浩村,記錄它的未檢查異常是滿足這個需求的最佳方法。

??特別重要的是占哟,接口中的方法要記錄它們可能拋出的未檢查異常心墅。此文檔構(gòu)成接口通用契約的一部分,并支持接口的多個實現(xiàn)之間的公共行為榨乎。
??使用Javadoc @throw標記記錄方法可以拋出的每個異常怎燥,但是不要對未檢查的異常使用throw關(guān)鍵字。重要的是蜜暑,使用您的API的程序員知道哪些異常被檢查铐姚,哪些異常被檢查,因為程序員的職責在這兩種情況下是不同的肛捍。Javadoc @throw標記生成的文檔在方法聲明中沒有對應的throw子句隐绵,這向程序員提供了一個強烈的視覺提示,說明異常是未檢查的篇梭。
??應該注意的是氢橙,記錄每個方法可以拋出的所有未檢查異常是理想的,在現(xiàn)實世界中并不總是可以實現(xiàn)恬偷。類進行修訂時悍手,如果將導出的方法修改為拋出額外的未檢查異常,這并不違反源或二進制兼容性袍患。假設(shè)一個類從另一個獨立編寫的類調(diào)用一個方法坦康。前類的作者可能會仔細記錄所有的每個方法拋出未經(jīng)檢查的異常,如果后者類修改把額外的未經(jīng)檢查的異常,很可能前類(未經(jīng)修訂)將傳播新的未經(jīng)檢查的異常,盡管它沒有文檔。
??如果類中的許多方法出于相同的原因引發(fā)異常诡延,可以在類的文檔注釋中記錄異常而不是為每個方法單獨編寫文檔滞欠。一個常見的例子是NullPointerException。一個類的文檔注釋可以這樣說肆良,
“如果在任何參數(shù)中傳遞null對象引用筛璧,該類中的所有方法都會拋出NullPointerException逸绎,”或類似的語句。

??總之夭谤,記錄您所編寫的每個方法可能引發(fā)的每個異常棺牧。對于未檢查異常和已檢查異常以及抽象方法和具體方法都是如此。本文檔應采用以下形式@在doc注釋中拋出標記朗儒。在方法的throw子句中分別聲明每個已檢查的異常颊乘,但不要聲明未檢查的異常。如果您不能記錄方法可能拋出的異常醉锄,其他人將很難或不可能有效地使用您的類和接口乏悄。
本文寫于2019.7.22,歷時1天

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恳不,一起剝皮案震驚了整個濱河市檩小,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妆够,老刑警劉巖识啦,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異神妹,居然都是意外死亡,警方通過查閱死者的電腦和手機家妆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門鸵荠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伤极,你說我怎么就攤上這事蛹找。” “怎么了哨坪?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵庸疾,是天一觀的道長。 經(jīng)常有香客問我当编,道長届慈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任忿偷,我火速辦了婚禮金顿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鲤桥。我一直安慰自己揍拆,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布茶凳。 她就那樣靜靜地躺著嫂拴,像睡著了一般播揪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上筒狠,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天猪狈,我揣著相機與錄音,去河邊找鬼窟蓝。 笑死罪裹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的运挫。 我是一名探鬼主播状共,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谁帕!你這毒婦竟也來了峡继?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤匈挖,失蹤者是張志新(化名)和其女友劉穎碾牌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體儡循,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡舶吗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了择膝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片誓琼。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肴捉,靈堂內(nèi)的尸體忽然破棺而出腹侣,到底是詐尸還是另有隱情,我是刑警寧澤齿穗,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布傲隶,位于F島的核電站,受9級特大地震影響窃页,放射性物質(zhì)發(fā)生泄漏跺株。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一腮出、第九天 我趴在偏房一處隱蔽的房頂上張望帖鸦。 院中可真熱鬧,春花似錦胚嘲、人聲如沸作儿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽攻锰。三九已至晾嘶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娶吞,已是汗流浹背垒迂。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妒蛇,地道東北人机断。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像绣夺,于是被迫代替她去往敵國和親吏奸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容